PHP基础之函数2——函数参数
通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。参数是从左向右求值的。
PHP 支持按值传递参数(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表,更多信息参见 func_num_args(), func_get_arg() 以及 func_get_args()。
Example #1 向函数传递数组
<?php function takes_array($input) echo '$input[0] + $input[1] = ', $input[0]+$input[1];}?>通过引用传递参数
默认情况下,函数参数通过值传递(因而即使在函数内部改变参数的值,它并不会改变函数外部的值)。如果希望允许函数修改它的参数值,必须通过引用传递参数。 如果想要函数的一个参数总是通过引用传递,可以在函数定义中该参数的前面加上符号 &:
Example #2 用引用传递函数参数
<?phpfunction add_some_extra(&$string){ $string .= ’and something extra.’;}$str = ’This is a string, ’;add_some_extra($str);echo $str; // outputs ’This is a string, and something extra.’?>默认参数的值
函数可以定义 C++ 风格的标量参数默认值,如下所示:
Example #3 在函数中使用默认参数
<?phpfunction makecoffee($type = 'cappuccino'){ return 'Making a cup of $type.n';}echo makecoffee();echo makecoffee(null);echo makecoffee('espresso');?>以上例程会输出:
Making a cup of cappuccino.Making a cup of .Making a cup of espresso.
PHP 还允许使用数组 array 和特殊类型 NULL 作为默认参数,例如:
Example #4 使用非标量类型作为默认参数
<?phpfunction makecoffee($types = array('cappuccino'), $coffeeMaker = NULL){ $device = is_null($coffeeMaker) ? 'hands' : $coffeeMaker; return 'Making a cup of '.join(', ', $types).' with $device.n';}echo makecoffee();echo makecoffee(array('cappuccino', 'lavazza'), 'teapot');?>
默认值必须是常量表达式,不能是诸如变量,类成员,或者函数调用等。
注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧;否则,函数将不会按照预期的情况工作。考虑下面的代码片断:
Example #5 函数默认参数的不正确用法
<?phpfunction makeyogurt($type = 'acidophilus', $flavour){ return 'Making a bowl of $type $flavour.n';}echo makeyogurt('raspberry'); // won’t work as expected?>
以上例程会输出:
Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/phptest/functest.html on line 41Making a bowl of raspberry .
现在,比较上面的例子和这个例子:
Example #6 函数默认参数正确的用法
<?phpfunction makeyogurt($flavour, $type = 'acidophilus'){ return 'Making a bowl of $type $flavour.n';}echo makeyogurt('raspberry'); // works as expected?>
以上例程会输出:
Making a bowl of acidophilus raspberry.
Note: 自 PHP 5 起,默认值可以通过引用传递。
可变数量的参数列表PHP 在用户自定义函数中支持可变数量的参数列表。其实很简单,只需使用 func_num_args(), func_get_arg(),和 func_get_args() 函数即可。
可变参数并不需要特别的语法,参数列表仍按函数定义的方式传递给函数,并按通常的方式使用这些参数。
相关文章:
1. IntelliJ IDEA设置默认浏览器的方法2. Python 的 __str__ 和 __repr__ 方法对比3. IntelliJ IDEA设置背景图片的方法步骤4. Spring security 自定义过滤器实现Json参数传递并兼容表单参数(实例代码)5. JAMon(Java Application Monitor)備忘記6. 学python最电脑配置有要求么7. 解决redis与Python交互取出来的是bytes类型的问题8. Python TestSuite生成测试报告过程解析9. Python Scrapy多页数据爬取实现过程解析10. Python OpenCV去除字母后面的杂线操作
