首頁 > 後端開發 > PHP問題 > php虛方法怎麼實現

php虛方法怎麼實現

藏色散人
發布: 2023-03-06 14:48:02
原創
1929 人瀏覽過

php虛擬方法的實作:先建立PHP範例檔;然後透過「

php虛方法怎麼實現

推薦:《PHP影片教學》 

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

學過C 的人都應該知道C 中有個虛函數的概念。而在php5中如何實現這個虛函數呢?

請看下面的程式碼: 

程式碼如下:

<?php 
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
登入後複製

程式碼如下:

<?php 
class ParentClass { 
static public function say( $str ) { 
static::do_print( $str ); 
} 
static public function do_print( $str ) { 
echo "<p>Parent says $str</p>"; 
} 
} 
class ChildClass extends ParentClass { 
static public function do_print( $str ) { 
echo "<p>Child says $str</p>"; 
} 
} 
class AnotherChildClass extends ParentClass { 
static public function do_print( $str ) { 
echo "<p>AnotherChild says $str</p>"; 
} 
} 
echo phpversion(); 
$a=new ChildClass(); 
$a->say( &#39;Hello&#39; ); 
$b=new AnotherChildClass(); 
$b->say( &#39;Hello&#39; );
登入後複製

以上是php虛方法怎麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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