以下のコードを見てください:
コードをコピー コードは次のとおりです:
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
www.bkjia.comtruehttp://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";...