PHP5中虚函数的实现方法分享
学过C++的人都应该知道C++中有个虚函数的概念。而在php5中如何实现这个虚函数呢?
请看下面的代码:
代码如下:
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::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
代码如下:
class ParentClass {
static public function say( $str ) {
static::do_print( $str );
}
static public function do_print( $str ) {
echo "
Parent says $str
";}
}
class ChildClass extends ParentClass {
static public function do_print( $str ) {
echo "
Child says $str
";}
}
class AnotherChildClass extends ParentClass {
static public function do_print( $str ) {
echo "
AnotherChild says $str
";}
}
echo phpversion();
$a=new ChildClass();
$a->say( 'Hello' );
$b=new AnotherChildClass();
$b->say( 'Hello' );

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











php5와 php8의 차이점은 성능, 언어 구조, 유형 시스템, 오류 처리, 비동기 프로그래밍, 표준 라이브러리 기능 및 보안 측면에서 있습니다. 자세한 소개: 1. 성능 향상 PHP5와 비교하여 PHP8은 JIT 컴파일러를 도입하여 일부 고주파 실행 코드를 컴파일하고 최적화하여 실행 속도를 향상시킵니다. PHP8에는 몇 가지 새로운 언어 구조와 기능이 도입되었습니다. PHP8은 명명된 매개변수를 지원하므로 개발자는 매개변수 순서 대신 매개변수 이름을 전달할 수 있습니다.

php5에서 포트 80을 변경하는 방법: 1. Apache 서버 구성 파일에서 포트 번호를 편집합니다. 2. PHP가 새 포트에서 작동하도록 PHP 구성 파일을 편집합니다. 3. Apache 서버를 다시 시작하면 PHP 응용 프로그램이 실행됩니다. 새 포트에서 실행을 시작합니다.

C++의 함수 오버로드를 사용하면 서로 다른 매개변수를 사용하여 동일한 이름의 함수에 대해 서로 다른 구현을 정의할 수 있으며, 가상 함수를 사용하면 파생 클래스의 기본 클래스 함수를 재정의하여 다형성을 얻을 수 있습니다. 함수 오버로딩과 가상 함수는 함께 작동할 수 있으며, 기본 클래스에 가상 오버로드 함수를 설계함으로써 파생 클래스는 특정 매개변수 조합의 버전만 오버로드할 수 있으므로 실제 사례에서 다른 유형을 계산하는 등 보다 유연한 다형성을 제공합니다. 유래부터 모양.

가상 함수 디버깅 방법: 단계적으로 중단점을 설정하고, 조건을 확인하기 위해 Assert()를 사용합니다. 동적 유형, 함수 스택을 확인하고 가상 함수를 재정의합니다.

php5가 포트 9000을 수신하지 않는 경우의 해결 단계: 1. PHP-FPM 구성 파일을 확인합니다. 2. PHP-FPM 서비스를 다시 시작합니다. 3. 방화벽을 끄거나 포트 전달을 구성합니다. 4. 다른 프로세스가 포트 9000을 사용하는지 확인합니다.

C++에서 친구 함수는 가상 함수와 상호 작용하므로 친구 함수는 가상 함수에 액세스하고 파생 클래스의 친구 함수를 호출하여 기본 클래스의 전용 멤버에 액세스할 수 있습니다. 이 상호 작용은 상속 계층 구조에 숨겨진 데이터에 액세스하거나 다형성 동작을 구현하는 데 사용될 수 있습니다.

php7과 php5의 구문 차이점은 다음과 같습니다. 1. PHP7은 엄격한 유형 선언을 도입하지만 PHP5 변수 유형은 암시적입니다. 2. PHP7은 스칼라 유형 선언을 지원하지만 PHP5는 지원하지 않습니다. 3. PHP7은 NULL 병합 연산자를 도입합니다. PHP5는 변수가 존재하고 null이 아닌지 확인합니다. 조건문을 사용해야 합니다. 4. PHP7은 새로운 비교 연산자 "<=>"를 추가하지만 PHP5는 그렇지 않습니다. 5. PHP5는 새로운 기능인 익명 클래스를 도입합니다. 하지 않습니다.

php7과 5 버전의 차이점에는 성능 개선, 스칼라 유형 선언, 반환 값 유형 선언, 예외 처리 개선, 익명 클래스, 구문 개선, 새로운 연산자, 향상된 오류 처리 및 일부 이전 기능 제거가 포함됩니다. 세부 소개: 1. 성능 향상 PHP7은 Zend Engine 3.0이라는 새로운 Zend 엔진을 도입하여 향상된 메모리 관리, 최적화된 함수 호출 및 예외 처리를 통해 PHP5의 성능을 약 2배 향상시켰습니다. , 향상된 가비지 수집 등
