Heim  >  Artikel  >  Backend-Entwicklung  >  函数 - PHP手册笔记

函数 - PHP手册笔记

WBOY
WBOYOriginal
2016-08-08 09:29:19802Durchsuche

用户自定义函数

函数无需在调用前被定义,除非是有条件定义的。

PHP中的所有函数和类都具有全局作用域。PHP不支持函数重载,也不可能取消定义或者重定义已声明的函数。

特意试了下,我的电脑上的PHP递归栈的最大深度为100。

函数参数

PHP支持按值传递参数(默认)、通过引用传递参数以及默认参数。也支持可变长度参数列表。PHP允许使用数组和特殊类型NULL作为默认参数。如果希望允许函数修改参数值,必须通过引用传递参数。

注意!当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧,否则函数将不按照预期工作。

PHP在用户自定义函数中支持可变数量的参数列表。在PHP 5.6及以上的版本中,有...语法实现,可以这样写,由于没有合适的环境也无法测试。

<code><?php function sum(...$numbers) {
	$acc = 0;
	foreach($numbers as $n) {
		$acc += $n;
	}
	return $acc;
}
echo sum(1, 2, 3, 4);</code></code>

当然在PHP 5.5等低版本中也可以使用可变数量的参数列表。通过函数func_num_args()func_get_arg()gunc_get_args()获得参数数目、某一参数内容、参数数组。

<code><?php function sum() {
	$acc = 0;
	foreach(func_get_args() as $n) {
		$acc += $n;
	}
	return $acc;
}
echo sum(1, 2, 3, 4);</code></code>

返回值

函数不能返回多个值,但可以通过返回一个数组来得到类似的效果。

<code><?php function small_numbers() {
	return array(0, 1, 2);
}
list($zero, $one, $two) = small_numbers();
echo "$zero  $one  $two";</code></code>

从函数返回一个引用,必须在函数声明和指派返回值给一个变量时都使用引用运算符&

<code><?php function & return_reference() {
	return $someref;
}
$newref = & return_reference();</code></code>

可变函数

PHP支持可变函数,也就是说,如果一个变量名后有圆括号,PHP将寻找与变量的值同名的函数,并且尝试执行它。可变函数可以用来实现回调函数、函数表等,虽然这些我都没用过。

当调用静态方法时,函数调用要比静态属性优先。

内部函数

PHP有很多标准的函数和结构,还有一些函数需要和特定的PHP扩展模块一起编译。

如果传递给函数的参数类型与实际的类型不一致,那么函数的返回值是不确定的。在这种情况下,通常函数会返回NULL。但这仅仅是一个惯例,并不一定如此。

匿名函数

匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。

手册中的第一个示例程序是正则表达式相关的,不是很了解.第二个示例程序是一个匿名函数变量赋值。注意,匿名函数变量的定义语句结尾要加分号。

<code><?php $greet = function($name) {
	echo "Hello $name  ";
};
$greet("world");
$greet('PHP');</code></code>

第三个示例程序,关于从父作用域继承变量,也没看懂,好遗憾。第四个示例程序,关于Closures和作用域,和实际相结合,不错的,仔细看看。

这是一个基本的购物车类,实现了添加某数量的商品并计算总价格的功能。其中使用了一个closure作为回调函数。

<code><?php class Cart {
	const PRICE_BUTTER = 1.00;
	const PRICE_MILK = 3.00;
	const PRICE_EGGS = 6.95;

	protected $products = array();

	public function add($product, $quantity) {
		$this->products[$product] = $quantity;
	}
	public function getQuantity($product) {
		return isset($this->products[$product]) ? 
			$this->products[$product] : FALSE;
	}
	public function getTotal($tax) {
		$total = 0.00;
		$callback = function($quantity, $product) use ($tax, &$total) {
			$pricePerItem = constant(__CLASS__ . "::PRICE_" . 
				strtoupper($product));
			$total += ($pricePerItem * $quantity) * ($tax + 1.0);
		};
		array_walk($this->products, $callback);
		return round($total, 2);
	}
}

$mycart = new Cart;
$mycart->add('butter', 1);
$mycart->add('milk', 3);
$mycart->add('eggs', 6);
echo $mycart->getTotal(0.05);</code>

注意!匿名函数语句末尾的分号一定不要落下!

(全文完)

以上就介绍了函数 - PHP手册笔记,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn