この例では、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() を呼び出します。
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 ( 'こんにちは' );