最近更新: 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