php中的后期静态绑定

后期静态绑定PHP手册

使用的保留关键字:

static

定义:

static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用

self与static的区别:

self调用的就是本身代码片段这个类,而static调用的是从堆内存中提取出来,访问的是当前实例化的那个类(即static作用于当前调用的类)

示例一(在静态环境下)

<?php
class A {
public static function who() {
echo __CLASS__;
}
public static function test() {
static::who(); // 后期静态绑定从这里开始
}
} class B extends A {
public static function who() {
echo __CLASS__;
}
} B::test();
?>
输出结果是"B"
 class IoC
{
protected static $registry = []; public static function bind($name, Callable $resolver)
{
static::$registry[$name] = $resolver;
} public static function make($name)
{
if (isset(static::$registry[$name])) {
$resolver = static::$registry[$name];
return $resolver();
}
throw new Exception('Alias does not exist in the IoC registry.');
}
} IoC::bind('bim', function () {
return new Bim();
});
IoC::bind('bar', function () {
return new Bar(IoC::make('bim'));
});
IoC::bind('foo', function () {
return new Foo(IoC::make('bar'));
}); // 从容器中取得Foo
$foo = IoC::make('foo');
$foo->doSomething(); // Bim::doSomething|Bar::doSomething|Foo::doSomething
上一篇:【VS外接程序】利用T4模板生成模块代码


下一篇:sun.security.x509.CertAndKeyGen;找不到