Sophie

Sophie

distrib > Mandriva > 2008.1 > x86_64 > by-pkgid > 05cd670d8a02b2b4a0ffb1756f2e8308 > files > 10593

php-manual-zh-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>函数的参数</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="PHP 手册"
HREF="index.html"><LINK
REL="UP"
TITLE="函数"
HREF="language.functions.html"><LINK
REL="PREVIOUS"
TITLE="函数"
HREF="language.functions.html"><LINK
REL="NEXT"
TITLE="返回值"
HREF="functions.returning-values.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="sect1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>PHP 手册</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="language.functions.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>章 17. 函数</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="functions.returning-values.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="functions.arguments"
>函数的参数</A
></H1
><P
>&#13;    通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。
   </P
><P
>&#13;    PHP 支持按值传递参数(默认),<A
HREF="functions.arguments.html#functions.arguments.by-reference"
>通过引用传递</A
>以及<A
HREF="functions.arguments.html#functions.arguments.default"
>默认参数</A
>。可变长度参数列表仅在
    PHP 4 和后续版本中支持;更多信息请参照<A
HREF="functions.arguments.html#functions.variable-arg-list"
>可变长度参数列表</A
>和涉及到的相关函数
    <A
HREF="function.func-num-args.html"
><B
CLASS="function"
>func_num_args()</B
></A
>,<A
HREF="function.func-get-arg.html"
><B
CLASS="function"
>func_get_arg()</B
></A
> 以及
    <A
HREF="function.func-get-args.html"
><B
CLASS="function"
>func_get_args()</B
></A
>。PHP 3 中通过传递一个数组参数可以达到类似的效果:
   </P
><P
>&#13;    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN5329"
></A
><P
><B
>例 17-5. 向函数传递数组</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">takes_array</font><font color="#007700">(</font><font color="#0000BB">$input</font><font color="#007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo </font><font color="#DD0000">"$input</font><font color="#007700">[</font><font color="#DD0000">0</font><font color="#007700">]</font><font color="#DD0000"> + $input</font><font color="#007700">[</font><font color="#DD0000">1</font><font color="#007700">]</font><font color="#DD0000"> = "</font><font color="#007700">, </font><font color="#0000BB">$input</font><font color="#007700">[</font><font color="#0000BB">0</font><font color="#007700">]+</font><font color="#0000BB">$input</font><font color="#007700">[</font><font color="#0000BB">1</font><font color="#007700">];<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="functions.arguments.by-reference"
>通过引用传递参数</A
></H2
><P
>&#13;     缺省情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。
    </P
><P
>&#13;     如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面预先加上符号 &#38;:
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN5337"
></A
><P
><B
>例 17-6. 用引用传递函数参数</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">add_some_extra</font><font color="#007700">(&amp;</font><font color="#0000BB">$string</font><font color="#007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$string </font><font color="#007700">.= </font><font color="#DD0000">'and something extra.'</font><font color="#007700">;<br />}<br /></font><font color="#0000BB">$str </font><font color="#007700">= </font><font color="#DD0000">'This is a string, '</font><font color="#007700">;<br /></font><font color="#0000BB">add_some_extra</font><font color="#007700">(</font><font color="#0000BB">$str</font><font color="#007700">);<br />echo </font><font color="#0000BB">$str</font><font color="#007700">;&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// outputs 'This is a string, and something extra.'<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="functions.arguments.default"
>默认参数的值</A
></H2
><P
>&#13;     函数可以定义 C++ 风格的标量参数默认值,如下:
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN5344"
></A
><P
><B
>例 17-7. 函数中默认参数的用途</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">makecoffee</font><font color="#007700">(</font><font color="#0000BB">$type </font><font color="#007700">= </font><font color="#DD0000">"cappuccino"</font><font color="#007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#DD0000">"Making a cup of $type.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br />echo </font><font color="#0000BB">makecoffee</font><font color="#007700">();<br />echo </font><font color="#0000BB">makecoffee</font><font color="#007700">(</font><font color="#DD0000">"espresso"</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     上面代码段的输出是:
    </P
><P
>&#13;     <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Making a cup of cappuccino.
Making a cup of espresso.</PRE
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     PHP 还允许使用数组和特殊类型 NULL 作为默认参数,例如:
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN5352"
></A
><P
><B
>例 17-8. 使用非标量类型作为默认参数</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">makecoffee</font><font color="#007700">(</font><font color="#0000BB">$types </font><font color="#007700">= array(</font><font color="#DD0000">"cappuccino"</font><font color="#007700">), </font><font color="#0000BB">$coffeeMaker </font><font color="#007700">= </font><font color="#0000BB">NULL</font><font color="#007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$device </font><font color="#007700">= </font><font color="#0000BB">is_null</font><font color="#007700">(</font><font color="#0000BB">$coffeeMaker</font><font color="#007700">) ? </font><font color="#DD0000">"hands" </font><font color="#007700">: </font><font color="#0000BB">$coffeeMaker</font><font color="#007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#DD0000">"Making a cup of "</font><font color="#007700">.</font><font color="#0000BB">join</font><font color="#007700">(</font><font color="#DD0000">", "</font><font color="#007700">, </font><font color="#0000BB">$types</font><font color="#007700">).</font><font color="#DD0000">" with $device.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br />echo </font><font color="#0000BB">makecoffee</font><font color="#007700">();<br />echo </font><font color="#0000BB">makecoffee</font><font color="#007700">(array(</font><font color="#DD0000">"cappuccino"</font><font color="#007700">, </font><font color="#DD0000">"lavazza"</font><font color="#007700">), </font><font color="#DD0000">"teapot"</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     默认值必须是常量表达式,不是(例如)变量,类成员,或者函数调用。
    </P
><P
>&#13;     请注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,可能函数将不会按照预期的情况工作。考虑下面的代码片断:
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN5358"
></A
><P
><B
>例 17-9. 函数默认参数不正确的用法</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">makeyogurt</font><font color="#007700">(</font><font color="#0000BB">$type </font><font color="#007700">= </font><font color="#DD0000">"acidophilus"</font><font color="#007700">, </font><font color="#0000BB">$flavour</font><font color="#007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#DD0000">"Making a bowl of $type $flavour.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /><br />echo </font><font color="#0000BB">makeyogurt</font><font color="#007700">(</font><font color="#DD0000">"raspberry"</font><font color="#007700">);&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// won't work as expected<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     上述例子的输出是:
    </P
><P
>&#13;     <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Making a bowl of raspberry .</PRE
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     现在,比较上面的例子和这个例子:
    </P
><P
>&#13;     <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN5366"
></A
><P
><B
>例 17-10. 函数默认参数正确的用法</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">function </font><font color="#0000BB">makeyogurt</font><font color="#007700">(</font><font color="#0000BB">$flavour</font><font color="#007700">, </font><font color="#0000BB">$type </font><font color="#007700">= </font><font color="#DD0000">"acidophilus"</font><font color="#007700">)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;return </font><font color="#DD0000">"Making a bowl of $type $flavour.</font><font color="#007700">\n</font><font color="#DD0000">"</font><font color="#007700">;<br />}<br /><br />echo </font><font color="#0000BB">makeyogurt</font><font color="#007700">(</font><font color="#DD0000">"raspberry"</font><font color="#007700">);&nbsp;&nbsp;&nbsp;</font><font color="#FF8000">// works as expected<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
    </P
><P
>&#13;     这个例子的输出是:
    </P
><P
>&#13;     <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Making a bowl of acidophilus raspberry.</PRE
></TD
></TR
></TABLE
>
    </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>注意: </B
>
      自 PHP 5 起,默认值可以通过引用传递。
     </P
></BLOCKQUOTE
></DIV
></DIV
><DIV
CLASS="sect2"
><H2
CLASS="sect2"
><A
NAME="functions.variable-arg-list"
>可变长度参数列表</A
></H2
><P
>&#13;     PHP 4 及更高版本已经在用户自定义函数中支持可变长度参数列表。这个真的很简单,用
     <A
HREF="function.func-num-args.html"
><B
CLASS="function"
>func_num_args()</B
></A
>,<A
HREF="function.func-get-arg.html"
><B
CLASS="function"
>func_get_arg()</B
></A
>,和
     <A
HREF="function.func-get-args.html"
><B
CLASS="function"
>func_get_args()</B
></A
> 函数。
    </P
><P
>&#13;     无需特别的语法,参数列表仍然能够被明确无误的传递给函数并且正常运转。
    </P
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="language.functions.html"
ACCESSKEY="P"
>上一页</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>起始页</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="functions.returning-values.html"
ACCESSKEY="N"
>下一页</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>函数</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="language.functions.html"
ACCESSKEY="U"
>上一级</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>返回值</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>