ホームページ  >  記事  >  バックエンド開発  >  PHP5における仮想関数の実装方法を共有_PHPチュートリアル

PHP5における仮想関数の実装方法を共有_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:31:02901ブラウズ

以下のコードを見てください:

コードをコピー コードは次のとおりです:

class A {
public function x() {
echo "A::x() が呼び出されました.n";
}
パブリック関数 y() {
self::x();
echo "A::y() が呼び出されました。n";
}
パブリック関数 z() {
$this-> ;x() ;
echo "A::z() が呼び出されました。n";
}
}
class B extends A {
public function x() {
echo "B::x() が呼び出されました。n" ";
}
}
$b = new B();
$b->y();
echo "--n";
$b->z();
?>gt;

この例では、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::y() は次のようになります。 :x() は B::x() によってオーバーライドされ、A::y() は B::x() を呼び出します。

上記の例の結果は次のとおりです:
A::x() が呼び出され、--
B::x() が呼び出されました。
virtual-function.php
コードをコピー コードは次のとおりです:

class ParentClass {
static public function Say( $str ) {
static::do_print ( $str );
}
static public function do_print( $str ) {
echo "

親は$str

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

Child は $str

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

AnotherChild は言う$str

";
}
}
echo phpversion();
$a=new ChildClass();
$a->say( 'Hello' );
$b=new AnotherChildClass();
$b->say ( 'こんにちは' );

http://www.bkjia.com/PHPjc/323108.html

tru​​ehttp://www.bkjia.com/PHPjc/323108.html技術記事以下のコードを見てください。 コードをコピーします。 コードは次のとおりです。 ?php class A { public function x() { echo "A::x() was created.n" } public function y() { self: :x(); echo "A::y() が呼び出されました。n";...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。