如何在启动应用程序时自动创建类的单个实例

我有我的逻辑课。


类 BlogApp


   class BlogApp

   {

    public static $app;


    public function __construct()

    {

        self::$app = Registry::instance();

        $this->getParams();

    }

类注册表


   class Registry

   {

    use TSingletone;


    protected static $properties = [];


    public function setProperty($name, $value)

    {

        self::$properties[$name] = $value;

    }


    public function getProperty($name)

    {

        if (isset(self::$properties[$name])) {

            return self::$properties[$name];

        }

        return null;

    }


    public function getProperties()

    {

        return self::$properties;

    }

我想在控制器中的任何地方使用我的类 BlogApp { } 来存储属性。例如


    BlogApp::$app->setProperty('img_width', 1280);


    $wmax = BlogApp::$app->getProperty('img_width');

和我的 public/index.php


    new \App\BlogApp();

但我有例外


    Call to a member function getProperty() on null

如果我用这个


    $d = new BlogApp();

    $d::$app->getProperty('img_width');

没问题。但我想要


   $wmax = BlogApp::$app->getProperty('img_width');

我的错误在哪里?


隔江千里
浏览 121回答 1
1回答

翻阅古今

您在BlogApp 类的构造函数中创建Registry 的对象,因此要调用getProperty 方法,您必须创建BlogApp 的对象。但是,如果您想通过对类的引用来调用 getProperty 函数,则不要在 BlogApp 构造函数中创建 Registry 的实例。class BlogApp{    public static $app;    // Create a function call get_instance     public static function get_instance()    {        // create instance of Registry class        self::$app = Registry::instance();        self::getParams();        return self::$app;    }}/** Call the getProperty funtion with reference of class.* 1 - Object of the Registry is Creating When you call the static function get_instance.* 2 - Once the object is created you can call the getProperty function.*/$wmax = BlogApp::get_instance()->getProperty('img_width');
打开App,查看更多内容
随时随地看视频慕课网APP