<code><?php
class father
{
public function __construct()
{
$this->init();
}
private function init()
{
echo "father\n";
}
}
class son extends father
{
public function init()
{
echo "son\n";
}
}
$son = new son();
</code><code><?php
class father
{
public function __construct()
{
$this->init();
}
private function init()
{
echo "father\n";
}
}
class son extends father
{
public function init()
{
echo "son\n";
}
}
$son = new son();
</code>
因为son里的init方法是public,而father的init方法是private,这个其实表示你son里的init方法并没有重写父类里的方法。那自然调用的仍然是父类自己的实现了
<code>$son.init(); // son </code>
<code>php</code><code><br>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";
}
}
</code>后期静态绑定
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.
<code>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();
</code><code>father son </code>
建议查看__construct基础知识,想告诉楼主踏实一点,我就不信你弄清了里面的方法还会来问
授之以渔
private方法无法被重写
father中的init如果是public或protected,那么是会输出son;但是现在是private,所以在father中调用init是不会输出son的,而是调father的int输出father。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号