PHPで仮想メソッドを実装する方法

藏色散人
リリース: 2023-03-06 14:48:02
オリジナル
1904 人が閲覧しました

Php 仮想メソッドの実装: まず PHP サンプル ファイルを作成し、次に pass "

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::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( &#39;Hello&#39; ); 
$b=new AnotherChildClass(); 
$b->say( &#39;Hello&#39; );
ログイン後にコピー

以上がPHPで仮想メソッドを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート