>  기사  >  백엔드 개발  >  PHP에서 가상 함수를 구현하는 방법

PHP에서 가상 함수를 구현하는 방법

怪我咯
怪我咯원래의
2017-07-14 10:50:424086검색

Virtualfunction 오버로딩 및 다형성 요구를 충족하기 위해 정의가 비어 있더라도 기본 클래스의 함수를 하위 클래스에서 다시 작성할 수도 있고 그렇지 않을 수도 있습니다.

순수 가상 함수는 기본 클래스에 정의되지 않으며 Java의 인터페이스 함수와 마찬가지로 하위 클래스에서 구현되어야 합니다!

가상 함수

도입 이유: 다형성 기능의 사용을 용이하게 하기 위해 기본 클래스에서 가상 함수를 정의해야 하는 경우가 많습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.