后期静态绑定:延迟静态绑定
代码漂亮,注释清晰易懂,所以这里就不啰嗦了。请看代码…
<?php
namespace _Demo;
//后期静态绑定:延迟静态绑定
//场景:用在静态继承的上下文环境中
class A
{
public static function who()
{
echo __CLASS__;
}
public static function test()
{
// self::who();绑定了,不灵活
// static::who();该方法的调用者(类)在调用的时候(执行的时候)再确定是那个类,比较灵活
static::who();
}
}
//B 已经处在继承的上下文环境中
class C extends A
{
// 重写父类A中的who()方法
public static function who()
{
echo __CLASS__;
}
}
C::test(); //test()的调用者就应该是B
echo '<hr>';
class Connect
{
public static function connect ()
{
// return self::config(); //不正确的写法
return static::config();
}
public static function config ()
{
return new \PDO('mysql:host=127.0.0.1;dbname=php','root','123456');//故意写错密码,方便调用时测试
}
}
class Link extends Connect
{
public static function config()
{
return new \PDO('mysql:host=127.0.0.1;dbname=php','root','a757871402');
}
}
//Link::connect():调用Connect父类中的connect()方法
$pdo = Link::connect();
var_dump($pdo);
待续…