< p >今天我們來聊一聊PHP 5.3中的復寫功能。所謂復寫,即重載或覆蓋某個函數或方法的現有行為,從而實現自定義的功能需求。PHP 5.3中提供了一種新的復寫方式——__invoke()方法。下面我們來具體探討這個方法的使用方法和注意事項。 p>< p >在PHP 5.3之前,我們在類中定義一個__call()方法來捕獲未定義的方法調用。在PHP 5.3中,我們可以使用__invoke()方法來覆蓋已有的函數或方法。關于__invoke()的具體使用方法,我們可以通過以下示例代碼加以說明。 p>< pre >
class Action {
public function __invoke() {
echo "I'm being called as a function!";
}
}
$action = new Action();
$action(); //輸出"I'm being called as a function!"
< p >在這個示例中,我們定義了一個名為Action的類,并在其中定義了一個__invoke()方法。我們在new Action()的實例$action上調用$action()方法時,__invoke()方法被調用,在屏幕上輸出"I'm being called as a function!"。 p>< p >另一個使用__invoke()方法的情景就是:類中定義的方法名和類定義的變量名相同,這種情況下,當我們調用該方法時,實際上是在調用類變量。如果我們想要調用該方法而不是類變量,我們可以在該類中使用__invoke()方法。如下面的例子所示: p>< pre >class MyClass{
public $x = 0;
function simpleMethod() {
echo "I am a method.";
}
public function __invoke ($y) {
$this->x += $y;
echo $this->x;
}
}
$obj = new MyClass();
$obj->simpleMethod(); //輸出 "I am a method."
$obj(1); //輸出 "1"
$obj(1); //輸出 "2"
< p >在這個示例中,我們在類MyClass中定義了一個$x屬性、一個simpleMethod()方法和__invoke()方法。當我們第一個調用$obj(1)時,__invoke()方法被調用并增加$x值1,結果屏幕上輸出1。當我們第二次調用$obj(1)時,也會調用__invoke()方法并將$x值再增加1,結果輸出2。 p>< p >但需要注意的是,__invoke()方法只能被定義為公共方法,因為我們不能從外部訪問類的私有方法。當我們將公共方法__invoke()定義為私有的或受保護的,會報出“Catchable fatal error: Method ClassName::__invoke() cannot be declared protected or private”錯誤。 p>< p >此外,我們還需要注意繼承。如果我們的類繼承了一個父類并想要使用__invoke()方法,我們的繼承的關系會被破壞。這是因為如果我們的父類已定義了__invoke()方法,那么我們的子類就不能再對其進行定義,否則,會拋出一個“Fatal error: Cannot redeclare ClassName::__invoke()”錯誤。 p>< p >綜上所述,PHP 5.3中的__invoke()方法能夠實現類似于函數的調用,并可以達到自定義功能需求的目的。不過,在使用__invoke()方法時,我們需要注意定義方法為公共方法、不要和已有方法或變量名重復,以及繼承的情況等問題。 p>上一篇java常用英語和意思
下一篇php 5.3 zend