PHP单例模式调用Applaction::init()返回NULL问题求助
问题分析与解决方案
问题根源
你的Applaction::init()方法存在逻辑缺陷:只有当static::$init为null时,才会创建实例并返回;一旦实例已经存在(执行run()方法时,Applaction实例必然已经初始化完成,因为run()是实例方法),这个方法就没有返回语句,默认返回null。而直接访问Applaction::$init能正常工作,是因为构造函数已经把这个静态属性赋值为当前实例了。
修复方案
修改init()方法,确保无论实例是否已创建,都返回static::$init:
//create class instance public static function init($file = null){ if(is_null(static::$init)){ static::$init = new static($file); } // 始终返回单例实例 return static::$init; }
补充说明
当你执行Applaction的run()方法时,说明Applaction实例已经通过之前的init()调用创建完成了。此时在App/index.php中再次调用init(),会跳过if分支的实例创建逻辑,但原方法没有返回值,所以得到null。修改后,每次调用init()都会返回已存在的单例对象,和直接访问静态属性的效果完全一致。
内容的提问来源于stack exchange,提问作者FAHAD
相关产品推荐
相关产品推荐

