1. 定义
function 函数名(参数1,参数2...)
{
函数体;
}
函数名区分大小写。
2.函数嵌套
function compute()
{
echo "开始计算<br/>";
function add($a,$b){
return $a+$b;
}
}
compute(); //调用外部函数
$a = 1;
$b = 2;
echo "$a + $b = " . add($a,$b); //调用内部函数
函数compute()内部又定义了一个add()函数。值得注意的是,只有当compute()函数被调用,
add()函数才被定义。而且,无论函数是定义在
内部还是外部,它都具有全局作用域,都可以在全局范围内被调用。
3.传参方式
1.按值传递
按值传递的参数只有在函数被调用时,才分配相关的内存。函数执行完后立即释放。
按值传递数组参数也是如此。函数执行时,首先会将数组完整复制一份给临时变量,函数体
执行完,临时变量所占内存会被释放,临时变量被注销。
2.引用传递
function test(&$name)
{
$name = '沫沫';
}
$girl = 'Mo';
echo "<p>调用函数之前";
echo "我叫$girl";
test($girl);
echo "<p>调用函数之后";
echo "我叫$girl";
并没有将$girl的值赋给$name,而是将$girl的内存地址赋给了$name。
对数组的按引用传递:
function test()
{
$people['name'] = '沫沫';
$people['age'] = 20;
$people['hobby'] = '读书';
}
$girl = array(
'name'=>'',
'age'=>'',
'hobby'=>''
);
echo "<p>调用之前:";
print_r($girl);
test($girl);
echo "<p>调用之前:";
print_r($girl);
对数组变量按引用传递,只是传递了数组首个元素的地址。
4. return 语句
含返回值的函数可以直接用在表达式中,但不可以被赋值,即不能为左值。
PHP 函数不能返回多值,同样的功能可以通过返回一个数组来实现。
1.返回引用变量
function &getName()
{
$name = '默默';
return $name; //返回引用变量
}
$name = &getName(); //将引用返回值赋给变量
echo $name;
定义时,必须在函数名称前面用引用操作符" & ",将该返回值赋给某个变量时,
函数名称前也必须用" & "标示符。
5. 可变函数
同样的函数名称,其函数体可以动态的变化。PHP允许将函数名称作为字符串赋给某个变量。
这就意味着,如果某个变量后面有一对圆括号,PHP引擎将寻找与该变量值同名的函数并执行。
function add($a,$b)
{
return $a+$b;
}
function sub($a,$b)
{
return $a-$b;
}
function mul($a,$b)
{
return $a*$b;
}
function div($a,$b)
{
if($b==0) return null;
return $a/$b;
}
$a = 1;
$b = 2;
$compute = 'add';
echo "$a + $b = " . $compute($a,$b) . "<br/>";
$compute = 'sub';
echo "$a - $b = " . $compute($a,$b) . "<br/>";
$compute = 'mul';
echo "$a * $b = " . $compute($a,$b) . "<br/>";
$compute = 'div';
echo "$a / $b = " . $compute($a,$b) . "<br/>";
6. 匿名函数
临时创建,没有名称的函数。PHP 匿名函数是通过闭包(closures)实现的,常用于回调函数。
array_filter()函数,其作用是按照回调函数过滤数组元素。
function filter($var)
{
return $var>10;
}
$myarray = array(10,11,12,13,5,6,7);
$newarray = array_filter($myarray,'filter');
print_r($newarray);
使用匿名函数:
$myarray = array(10,11,12,13,5,6,7);
$newarray = array_filter($myarray,function($var){return $var>10; });
print_r($newarray);
7. PHP 默认参数