PHP中父类调用子类方法
吃早餐的时候在 这里看到的一个问题,有点意思,一般是不推荐父类调用子类的方法的,但是大家实现方法多样化,了解下也可以。
这种情况下要强约束,不然很容易出现bug!因为在继承关系中,父类是不知道子类的,这种情况必须要使用接口或者抽象类来约束!
先看代码
<?phpclass A{ public function run() { //我在这里把对象打印出来,方便理解 var_dump($this); $this->say(); }}class B extends A{ protected function say() { echo 'B-say'; }}$b = new B();$b->run();//结果:object(B)#1 (0) { } B-say
看到没,在父类中,$this已经指向了B。
我把继承分解出来,B实际上成了:
<?phpclass B{ public function run() { //我在这里把对象打印出来,方便理解 var_dump($this); $this->say(); } protected function say() { echo 'B-say'; }}$b = new B();$b->run();//结果:object(B)#1 (0) { } B-say
因为B会继承A的方法,所以看来好像是父类A成功调用了子类B的方法。
至于问题中提及到say()方法变成private后,就出现调用失败的问题。这个是private的范围起的作用。
我们来看下run()继承的实质。
分解后的代码中B类中确实有了run(),但是这个run()是属于它老爹A的,它只能“借来”用,“产权”属于B,所以调用run()的时候,要跑去老爹A那里用。
注意,跑去老爹A那里用的时候, 使用环境是就是A了。
但是private说了,我修饰的东西, 只能在当前类使用,离开了我这里,谁了不能用。
所以就报错了。
继承调用后的分解代码:
<?phpclass A{ public function run() { $b = new B(); $b->say();//在外部new B对象调用private方法,失败 }}class B extends A{ private function say() { echo 'B-say'; }}$b = new B();$b->run();//结果:PHP Fatal error
如果要有自己的run方法,就会要用的重写了。
<?phpclass A{ public function run() { var_dump($this); $this->say(); }}class B extends A{ public function run() { $this->say(); } private function say() { echo 'B-say'; }}$b = new B();$b->run();//结果:B-say
点击生成二维码
本文由 程小白创作,本文可自由转载、引用,但需署名作者且注明文章出处。

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

Long URLs, often cluttered with keywords and tracking parameters, can deter visitors. A URL shortening script offers a solution, creating concise links ideal for social media and other platforms. These scripts are valuable for individual websites a

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

This is the second and final part of the series on building a React application with a Laravel back-end. In the first part of the series, we created a RESTful API using Laravel for a basic product-listing application. In this tutorial, we will be dev

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

The 2025 PHP Landscape Survey investigates current PHP development trends. It explores framework usage, deployment methods, and challenges, aiming to provide insights for developers and businesses. The survey anticipates growth in modern PHP versio

In this article, we're going to explore the notification system in the Laravel web framework. The notification system in Laravel allows you to send notifications to users over different channels. Today, we'll discuss how you can send notifications ov
