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.
Example #1
class Father
{
public function __construct()
{
$this->init();
}
private function init()
{
echo 'father' . PHP_EOL;
}
}
class Son extends Father
{
public function __construct()
{
parent::__construct();
$this->init();
}
private function init()
{
echo 'son' . PHP_EOL;
}
}
new Son();
输出
father
son
Example #2
class Father
{
public function __construct()
{
$this->init();
}
private function init()
{
echo 'father' . PHP_EOL;
}
}
class Son extends Father
{
private function init()
{
echo 'son' . PHP_EOL;
}
}
new Son();
输出
father