Php 가상 메소드 구현: 먼저 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( 'Hello' ); $b=new AnotherChildClass(); $b->say( 'Hello' );
위 내용은 PHP에서 가상 메소드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!