我有一个小问题。这里是:
这是我的单例抽象类:
abstract class Singleton { protected static $_instance = NULL; /** * Prevent direct object creation */ final private function __construct() { $this->actionBeforeInstantiate(); } /** * Prevent object cloning */ final private function __clone() { } /** * Returns new or existing Singleton instance * @return Singleton */ final public static function getInstance(){ if(null !== static::$_instance){ return static::$_instance; } static::$_instance = new static(); return static::$_instance; } abstract protected function actionBeforeInstantiate(); }
之后,我创建了一个抽象注册表类:
abstract class BaseRegistry extends Singleton { //... }
现在是会话注册的时候了。
class BaseSessionRegistry extends BaseRegistry { //... protected function actionBeforeInstantiate() { session_start(); } }
最后一步:
class AppBaseSessionRegistryTwo extends BaseSessionRegistry { //... } class AppBaseSessionRegistry extends BaseSessionRegistry { //... }
测试
$registry = AppBaseSessionRegistry::getInstance(); $registry2 =AppBaseSessionRegistryTwo::getInstance(); echo get_class($registry) . '|' . get_class($registry2) . '<br>';
输出:
AppBaseSessionRegistry|AppBaseSessionRegistry
我的期望是:
AppBaseSessionRegistry|AppBaseSessionRegistryTwo
为什么我会得到这样的结果?我怎样才能重新编写我的代码以获得我期望的结果?
更新:我在我的框架中使用它。用户将扩展我的BaseSessionRegistry
课程并添加他们的东西。我想在我的框架类中解决这个问题