您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

这段代码为何会输出father?

2025/6/17 23:28:34发布21次查看
init(); } private function init() { echo father\n; }}class son extends father{ public function init() { echo son\n; }}$son = new son();

回复内容: init(); } private function init() { echo father\n; }}class son extends father{ public function init() { echo son\n; }}$son = new son();

因为son里的init方法是public,而father的init方法是private,这个其实表示你son里的init方法并没有重写父类里的方法。那自然调用的仍然是父类自己的实现了
$son.init(); // son
php
class father{ public function __construct() { // $this->init(); static::init();//php5.6 } private function init() { echo father\n; }}class son extends father{ /*public function __construct() { $this->init(); }*/ public function init() { echo son\n; }}
后期静态绑定
reference: http://docs.php.net/manual/en/language.oop5.late-static-bindings.php
note:
in non-static contexts, the called class will be the class of the object instance. since $this-> will try to call private methods from the same scope, using static:: may give different results. another difference is that static:: can only refer to static properties.
class father{ public function __construct() { $this->init(); } private function init() { echo father\n; }}class son extends father{ public function __construct() { parent::__construct(); $this->init(); } private function init() { echo son\n; }}new son();
输出fatherson
建议查看__construct基础知识,想告诉楼主踏实一点,我就不信你弄清了里面的方法还会来问
授之以渔
private方法无法被重写
father中的init如果是public或protected,那么是会输出son;但是现在是private,所以在father中调用init是不会输出son的,而是调father的int输出father。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product