值、引用参数
按值传递
PHP中默认是按值传递参数,而且函数参数也属于局部变量,所以即使在函数内部改变参数的值,它并不影响外部的值。函数为子程序,调用函数的程序可以称为父程序。父程序直接传递指定的值或是变量给函数使用。由于传递的值和变量,与函数里的数值分别存储在不同的内存区块,所有如果函数对导入的数值做了任何变动,并不会父程序造成直接影响。
<?php
header('content-type:text/html;charset=utf-8');
function test($arg){
$arg=200;
}
$var=100;
test($var);
echo $var;//输出结果100 $var的值没有变化
引用传递
如果希望允许修改它的参数值,必须通过引用传递参数。它是把该数值或变量的内存储存区块相对地址导入函数中,因此当该值在函数中有任何变动时,会带动对父程序造成影响。
<?php
header('content-type:text/html;charset=utf-8');
function test(&$arg){
$arg=200;
}
$var=100;
test($var);
echo $var;//输出结果200 $var的值变化
注意:如果在函数形参中使用‘&’修饰参数,在调用时就必须传入一个变量给这个参数,而不能是一个值。
默认参数
在定义函数时声明了参数,而在调用函数时没有指定或者是少指定了参数,就会出现缺少参数的警告。在PHP中,支持函数的默认方式调用,即为参数指定一个默认值。在调用函数时如果没有指定参数的值,在函数中会使用默认值。默认值必须是常量表达式,不能是变量、类成员或者函数调用。php还允许使用数组和特殊类型NULL 做为默认参数。
<?php
header('content-type:text/html;charset=utf-8');
function test($name='张三',$age=20,$sex="男"){
echo "我的名字是:{$name} 年龄: {$age} 性别: $sex <br/>";
}
test();
test("李四");
test("王五",25);
test("贾六",22,'女');
//结果如下:
我的名字是:张三 年龄: 20 性别: 男
我的名字是:李四 年龄: 20 性别: 男
我的名字是:王五 年龄: 25 性别: 男
我的名字是:贾六 年龄: 22 性别: 女