h5 PHP5における仮想関数の実装方法を共有する

WBOY
リリース: 2016-07-29 08:44:53
オリジナル
1006 人が閲覧しました

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

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


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();
?>


この例では、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 "< p>Child は $str

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

AnotherChild は $str< /p>";
}
}
echo phpversion();
$a=new ChildClass();
$a->say( 'Hello' );
$b=new AnotherChildClass();
$b- >say( 'こんにちは' ' );
以上、h5 PHP5 における仮想関数の実装方法の共有を、h5 の内容も含めて紹介しました。PHP チュートリアルに興味のある友人の参考になれば幸いです。

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