写了段代码,不知道该如何理解面向对象的继承
Jun 23, 2016 pm 02:24 PM
PHP 面向对象 继承
class ParentClass { private $private = 1; public function getPrivate() { echo 'getPrivate() belong to class "' . get_class($this) . '"<br>'; return $this->private; }}class Son extends ParentClass {}$son = new Son();echo 'private=' . $son->getPrivate();
我预期结果是应该报错的,但并没有报错。
执行结果是:
in class "ParentClass" function getPrivate():"Son"
private=1
想问为什么$private私有属性会被打印出来呢
回复讨论(解决方案)
这样都打印不出来,然后你想这个$private怎么样才能暴露出来?
php的private是指属性或方法,你不能通过外部直接访问,意思是
你不能$son->private这么去访问,而只能通过内部的public方法暴露出来。
getPrivate 是 ParentClass 类的方法,当然能通过 ParentClass::getPrivate 打印出 ParentClass 的私有属性 private
正如#1,#2楼所说,因为子类继承了基类的方法,基类的方法可以打印出私有属性。
而子类不能继承基类的私有属性
因此楼主想看到的结果其实是
echo $son->$private;吧
这样都打印不出来,然后你想这个$private怎么样才能暴露出来?
php的private是指属性或方法,你不能通过外部直接访问,意思是
你不能$son->private这么去访问,而只能通过内部的public方法暴露出来。
private需要以非直接的方式去得到它的值,这个我了解。
我不明白的是:为什么getPrivate()方法中调用函数get_class()得到的是"Son"而不是"ParentClass"
getPrivate 是 ParentClass 类的方法,当然能通过 ParentClass::getPrivate 打印出 ParentClass 的私有属性 private
既然getPrivate()方法是属于"ParentClass"类的,那为什么在getPrivate()方法内,打印get_class(),却是"Son"而不是"ParentClass"呢
想想矛盾的地方在于父类中的方法getPrivate()内,"$this"究竟代表了哪个类的实例呢,父类还是子类?
【看了下文档关于get_class()方法的说明中,有这样的例子
<?phpabstract class bar { public function __construct() { var_dump(get_class($this)); var_dump(get_class()); }}class foo extends bar {}new foo;?>
string(3) "foo"string(3) "bar"

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)

Arbeiten mit Flash -Sitzungsdaten in Laravel

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs

12 Beste PHP -Chat -Skripte auf Codecanyon

Ankündigung von 2025 PHP Situation Survey
