11月
22
2009
分類:
最近更新:
2009-11-22
PHP 5.3/6 新增功能 - New magic methods
There are two new magic methods, __callStatic and __invoke.
PHP5.3 起新增了魔術方法 __invoke()。
簡單說,就是 C++/C# 中的 operator()
運算子重載。
還新增了魔術方法 __callStatic(),專門負責調用靜態方法。
__invoke()
PHP5.3 新增了魔術方法 __invoke()。
簡單說,就是 C++/C# 中的 operator()
運算子重載。
好吧,對於不熟悉 C++/C# 的讀者來說,前一句話一點都不簡單。
請看從函數指標到函數個體,大致了解函數與函數個體的區別。
<?php
function func() {
echo "pure function\n";
}
class Func {
private $count;
function __construct() {
$this->count = 0;
}
function __invoke() {
$this->count++;
echo "invoke function object (count: {$this->count})\n";
}
}
$funcObj = 'func';
$funcObj(); // call func()
$funcObj = new Func;
$funcObj2 = new Func;
$funcObj();
$funcObj();
$funcObj2();
?>
pure function invoke function object (count: 1) invoke function object (count: 2) invoke function object (count: 1)
函數個體可以保有獨自的狀態,所以最後一行的 $funcObj2()
所顯示的計數值不同於前兩行。
__callStatic()
PHP 還新增了魔術方法 __callStatic()。它主要目的是補齊魔術方法 __call()
不能調用靜態方法之不足。亦即 __callStatic
是專門負責調用靜態方法的魔術方法。
<?php
class Class6 {
public static function __callStatic($name, $args) {
echo "You try to call static method $name\n");
}
}
Class6::foo();
?>
You try to call static method foo
相關文章
樂多舊網址: http://blog.roodo.com/rocksaying/archives/10796767.html