简单通俗的来说, self就是写在哪个类里面, 实际调用的就是这个类.
所谓的后期静态绑定, static代表使用的这个类, 你在父类里写的static, 然后通过子类直接/间接用到了这个static, 这个static指的就是这个子类, 所以说static和$this很像, 但是static可以用于静态方法和属性等.
举个简单的例子,
<?php
class ATest {
public function __construct(){
echo 'ATest __construct<br>';
}
public function say()
{
echo 'Segmentfault<br>';
}
public function callSelf()
{
self::say();
}
public function callStatic()
{
static::say();
return new static();
}
}
class BTest extends ATest {
public function __construct(){
echo 'BTest __construct<br>';
}
public function say()
{
echo 'PHP<br>';
}
}
$b = new BTest();
$b->say(); // output: php
$b->callSelf(); // output: segmentfault
$b->callStatic(); // output: php
输出:
BTest __construct
PHP
Segmentfault
PHP
BTest __construct