아래 코드를 보세요.
코드 복사 코드는 다음과 같습니다.
class A {
공용 함수 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()가 호출되었습니다. :z( )가 호출되었습니다.
virtual-function.php
코드 복사 코드는 다음과 같습니다.
class ParentClass {
정적 공용 함수 say( $str ) {
static::do_print( $str )
}
정적 공용 함수 do_print( $str ) {
echo "< ;p>Parent가 $str
라고 말합니다."
}
}
class ChildClass는 ParentClass를 확장합니다. {
static public function do_print( $str ) {
echo "
하위가 $str
라고 말합니다."
}
}
class AnotherChildClass는 ParentClass를 확장합니다 {
static public function do_print( $str ) {
echo "< ;p>AnotherChild는 $ str";
}
}
echo phpversion();
$a=new ChildClass();
$a->say( '안녕하세요' );
$b=new AnotherChildClass()
$b->say( '안녕하세요' );
이상에서는 h5 컨텐츠를 포함하여 h5 PHP5의 가상 함수 구현 방법을 공유하는 방법을 소개했습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.