> 백엔드 개발 > PHP 문제 > PHP에서 가상 메소드를 구현하는 방법

PHP에서 가상 메소드를 구현하는 방법

藏色散人
풀어 주다: 2023-03-06 14:48:02
원래의
1928명이 탐색했습니다.

Php 가상 메소드 구현: 먼저 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( &#39;Hello&#39; ); 
$b=new AnotherChildClass(); 
$b->say( &#39;Hello&#39; );
로그인 후 복사

위 내용은 PHP에서 가상 메소드를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿