码迷,mamicode.com
首页 > Web开发 > 详细

通过工厂模式来认识PHP的静态延迟绑定

时间:2015-09-22 16:46:39      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

通过简单的工厂模式来认识PHP的静态延迟绑定

<?php
abstract class Demo
{
    public static $name = ‘sallency‘;
    
    //error
    public static function selfInstance() {
        //self是用来解析上下文
        //此处的语境为调用定义它的类
        //抽象类不可实例化所以会报错
        return new self();
    }
    
    public static function staticInstance() {
        //static是用来调用上下文
        //此处的语境为解析调用它的上下文(某个类)
        //若是非抽象类调用的话自然可以实例化
        return new static ();
    }
}

class StaticDemo extends Demo
{
    public function __construct() {
        echo "i am construct of " . __CLASS__ . ‘<br/>‘;
        echo self::$name;
    }
}
var_dump(StaticDemo::staticInstance());
var_dump(Demo::$name);//抽象类只是不能实例化对象
?>

注意抽象类里的selfInstance方法是错误的,内部使用的return new self()是解析上下文,即调用此方法最初定义的地方,最初是在抽象类中,自然实例化报错

在类中 new self() new static()都可以实例化类对象,但self是解析上下文,即实例化定义自己的类,static则是根据当前上下文是哪一类在调用自己而将自己指向此类

静态延迟绑定

new self();

实例化一个自己被定义的类的对象

new parent();

实例化一个自己的父类对象

new static();

实例化一个调用自己的当前类的对象

通过工厂模式来认识PHP的静态延迟绑定

标签:

原文地址:http://my.oschina.net/sallency/blog/509677

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!