PHP函数
内部函数
<?php
header("Content-type:text/html;charset=utf-8");
function compute(){
echo "开始计算啦</br>";
function add($a, $b){
return $a + $b;
}
}
compute(); //调用外部函数
$a = 1;
$b = 2;
echo "$a + $b =".add($a, $b); //调用内部函数
注意:只有当外部函数被调用时,内部函数才可以调用!
按值传递数组参数
<?php
header("Content-type:text/html;charset=utf-8");
function introduceMySelf($me){
echo "本府".$me['name'].',年芳'.$me['age'].',尤好'.$me['hobby'];
}
$mo['name'] = '沫沫';
$mo['age'] = 20;
$mo['hobby'] = '唱歌';
introduceMySelf($mo);
引用传递
按值传递的参数在函数体中并没有操作,而是重新分配了一个完全一样的变量,有时时一种浪费。为了解决这个问题,PHP提供了引用传递的方式来传递参数。
具体使用时,只要在函数体定义中的参数前加上 &
字符即可。
<?php
header("Content-type:text/html;charset=utf-8");
function changeName(&$name){//前面加&,使用引用传递参数
$name = '沫沫';
}
$girl = 'Mo';
echo "<p>调用函数之前:";
echo "我叫$girl";
changeName($girl);
echo "<p>调用函数之后:";
echo "我叫$girl";
在执行 changeName(&$name)
时,首先会申请一个临时变量 $name
,但并没有将 $girl
的值赋给 $name
,而是将 $girl
的内存地址赋给了 $name
,这相当于给 $girl
起了个别名叫$name
,接下来函数体中访问$name
,实质是间接访问 $girl
,因此对 $name
的任何操作也会影响到$girl
。函数变量$name
的内存地址被释放,$name
的内存地址依然存在。
可变函数
<?php
header("Content-type:text/html;charset=utf-8");
function add($a,$b){
return $a + $b;
}
function sub($a,$b){
return $a - $b;
}
$a = 1;
$b = 2;
$compute = 'add';
echo "$a+$b=".$compute($a,$b).'<br>'; //实际调用add函数
$compute = 'sub';
echo "$a-$b=".$compute($a,$b).'<br>'; //实际调用sub函数
匿名函数
PHP 内置函数 array_filter()
,其作用就是按照回调函数过滤数组元素。
<?php
header("Content-type:text/html;charset=utf-8");
function filter($var){
return $var > 10;
}
$myarray = array(4, 5, 7, 12, 13, 15);
echo "<p>原数组:<br>";
print_r($myarray);
$newarray = array_filter($myarray, 'filter');
echo "<p>过滤后的数组:<br>";
print_r($newarray);
运行结果:
原数组:
Array ( [0] => 4 [1] => 5 [2] => 7 [3] => 12 [4] => 13 [5] => 15 )
过滤后的数组:
Array ( [3] => 12 [4] => 13 [5] => 15 )
如果使用匿名函数可以使得代码更加简洁优雅。
匿名函数的使用:
<?php
header("Content-type:text/html;charset=utf-8");
$myarray = array(4, 5, 7, 12, 13, 15);
echo "<p>原数组:<br>";
print_r($myarray);
$newarray = array_filter($myarray, function($var) { return $var > 10; });
echo "<p>过滤后的数组:<br>";
print_r($newarray);
注意,匿名函数只在 PHP 5.3.0 及其更高版本中提供。