PHP经典实例(php cookbook)读书笔记 (0x06)
0x06函数
设置默认值
function this_function($val = 'de'){
echo $val;
}
echo this_function();// de
-----------------------
引用传递
function this_function(&$val){
$val = 2;
}
$v = 1;
this_function($v);
echo $v;//2
当声明函数应传入引用的参数时,就不能传入一个常量。
强制传入参数的类型
function this_function(array $val){
...
}
$v = 1;
this_function($v);//E_RECOVERABLE_ERROR
类型提示可以是类名,接口名,array,callable,如果参数与类型提示不匹配,触发E_RECOVERABLE_ERROR错误
按引用返回值(返回一个引用)
$v =array(0,1,2,3,4,5,6,7,8,9);
function &this_function(&$val){
foreach( $val as $key => $v)
if( $v == 1)return $val[$key];
}
$val =& this_function($v);
$v[1] = 100;
echo $val;//100
//如果返回函数里的变量如$v,也可以得出值为1,使用引用返回没有意义。
当变量名由函数等组成的表达式计算出来时,把表达式使用大括号括起来。
${find_this_name()} = 111;
调用可变函数
all_user_func($function_name,$arg1,$arg2,...);
all_user_func_array($function_name,$args[]);
$function_name为调用的函数名,$arg1,$args[]为传入函数的参数
在函数中获取所有参数func_get_args()
调用类中的方法
$obj = new classs_name();
call_user_func(array($obj, $function_name), $arg1,$arg2,...);
调用类中的静态方法
call_user_func(array($classs_name, $function_name), "111");
//或
call_user_func("$classs_name::$function_name",$arg1,$arg2,...);
在函数中访问全局变量
使用global关键字引入
global $val
或者
$GLOBALS['val']
当需要在函数中在全局域上消除这个变量时应使用
unset( $GLOBALS['val']);
而不是 global $val
后unset($val);
创建匿名函数以及闭包语法
1.使用闭包语法创建匿名函数
匿名函数将一个函数储存在一个变量中,需要使用闭包语法。
$b = 1;
$a = function($arg) use($b) {
f($arg == $b)echo"Yes";
}//闭包语法
$a(1);//调用
use 中是枚举可以在闭包域中使用的变量。
1.使用creat_function(参数表达式,函数内容表达式):