Php 仮想メソッドの実装: まず PHP サンプル ファイルを作成し、次に pass "
おすすめ:「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::y() は次のようになります。 :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( 'Hello' ); $b=new AnotherChildClass(); $b->say( 'Hello' );
以上がPHPで仮想メソッドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。