静态延迟绑定
2013-07-09 21:42
120 查看
<?php /** * 静态工厂方法 * 如果我们有多个子类需要静态 实例化(见注册表模式),但是我们又不想在每一个子类中都写一个创建对象的方法。 * 那么写在超类中可以吗? * 请看下面: */ abstract class DomainObject { public static function create() { //return new self(); return new static(); } } class User extends DomainObject{ } class Document extends DomainObject{ } //通过Document去调用create方法,但是实际create方法内部的new self()会尝试实例化Domainbject,而不是Document类 //原因在于self不是指调用上下文,而是指的是解析上下文,解析,顾名思义,self在DomainObject类中的create方法内部,所以self就指向了DomainObject类,所以它才会去尝试实例化DoaminObject类,与我们的想法背道而驰。 //static关键字可以解决这个问题,static指的是调用上下文,create()方法有Document类调用,所以该次调用的static就绑定到了Document类,从而达到了我们的目地。 $obj = Document::create(); var_dump($obj);
相关文章推荐
- PHP延迟静态绑定
- PHP静态延迟绑定简单示例
- PHP静态延迟绑定 static
- PHP静态延迟绑定和普通静态效率的对比
- PHP静态延迟绑定
- php5.3新特性之延迟静态绑定
- php的延迟静态绑定
- 魔术方法,延迟绑定及静态成员
- 静态方法的延迟绑定
- PHP静态延迟绑定:static
- PHP静态延迟绑定和普通静态效率简单对比
- php中的继承和延迟静态绑定的问题
- PHP静态延迟绑定简单演示样例
- PHP的延迟静态绑定--static
- 静态延迟绑定
- 静态延迟绑定:static 关键字
- php 静态延迟绑定
- php源码之路第五章第五节 ( 魔术方法,延迟绑定及静态成员)
- PHP 延迟静态绑定 功能 static
- php静态延迟绑定的实现