首頁 > 後端開發 > php教程 > h5 PHP5中虛函數的實作方法分享

h5 PHP5中虛函數的實作方法分享

WBOY
發布: 2016-07-29 08:44:53
原創
1043 人瀏覽過

請看下面的程式碼:

複製程式碼 程式碼如下:


class A {
public function x() {
echo "A::x() was called.n";
}
public function y() {
self::x();
echo "A::y() was called.n";
}
public function z(​​) {
$this->x();
echo "A::z() was called .n";
}
}
class B extends A {
public function x() {
echo "B::x() was called.n";
}
}
$b = new B();
$b->y();
echo "--n";
$b->z();
?>


該例中,A::y()調用了A::x(),而B::x()覆蓋了A::x(),那麼當呼叫B ::y()時,B::y()應該呼叫A::x()還是B::x()呢?在C++中,如果A::x()未被定義為虛擬函數,那麼B::y()(也就是A::y())將會呼叫A::x(),而如果A::x ()使用virtual關鍵字定義成虛擬函數,那麼B::y()將會呼叫B::x()。然而,在PHP5中,虛函數的功能是由 self 和 $this 關鍵字實現的。如果父類別中A::y()中使用self::x() 的方式呼叫了A::x(),那麼在子類別中不論A::x()是否被覆蓋,A::y( )呼叫的都是A::x();而如果父類別中A::y()使用$this->x() 的方式呼叫了A::x(),那麼如果在子類別中A: :x()被B::x()覆蓋,A::y()將會呼叫B::x()。
上例的運作結果如下:
A::x() was called. A::y() was called. --
B::x() was called. A::z( ) was called.
virtual-function.php

複製程式碼 程式碼如下:

static public function say( $str ) {
static::do_print( $str );
}
static public function do_print( $str ) {
echo "

Parent says $str

";
}
}
class ChildClass extends ParentClass {
static public function do_print( $str ) {
echo "

Child says $ str

";
}
}
class AnotherChildClass extends ParentClass {
static public function do_print( $str ) {
echo "

AnotherChild says $str

";
}
}
echo phpversion();
$a=new ChildClass();
$a->say( 'Hello' );
$b= new AnotherChildClass();
$b->say( 'Hello' );


以上就介紹了h5 PHP5中虛函數的實作方法分享,包含了h5方面的內容,希望對PHP教學有興趣的朋友有幫助。

相關標籤:
h5
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板