PHP 文档学习 - 4 - 函数

1. 自定义函数

(1) 函数调用前不用定义, 除非是有条件的定义

(2) 所有函数都具有全局作用域

(3) 不支持函数重载

(4) 函数名称大小写不敏感( 变量名大小写敏感 )

(5) 参数加 & 将使用引用传参

(6) 可以多传参数, 不能少传

(7) 默认参数可使用数组( 必须为常量表达式 )

(8) 实现可变参数列表( func_num_args, func_get_arg, func_get_args )

function echoln() {
	foreach(func_get_args() as $value) {
		echo $value;
	}
	echo '<br />';
}

echoln(1, 2, 3, 4);
// 输出: 1234<br />

2. 匿名函数

(1) 匿名函数通过类 Closure 实现, 每个匿名函数都是个 Clouse 对象

// 模拟实现只能带0个或1个参数的匿名函数对象
class FunctionObject {
	private $func;
	
	function __construct($func) {
		$this->func = $func;
	}
	
	function __invoke($args) {
		$func = $this->func;
		return $func($args);
	}
}

// 调用
$func = new FunctionObject(function($str) {
	return print $str;
});

$func('hello world');
// 输出: hello world

 (2) PHP 中的匿名函数是种伪闭包, 通过 use() 可以捕捉上下文中的自由变量 

$init = 1;
$adder = function($x) use($init) {
	return $x + $init;
};

var_dump($adder);
/* 输出:
	object(Closure)#1 (2) {
		["static"]=> array(1) { 
			["init"]=> int(1) 
		}
		
		["parameter"]=> array(1) { 
			["$x"]=> string(10) "" 
		} 
	}
*/
可以看出PHP捕捉自由变量是通过将变量拷贝为对象的 "staitc" 属性实现的

(3) 匿名函数实现递归

// 匿名函数递归实现阶乘
// 假定输入不为负数
$factorial = function($num) use(&$factorial) {
	return $num > 0 ? $factorial($num - 1) * $num : 1;
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值