Как сделать автоматическое создание одного экземпляра класса при запуске приложения - PullRequest
1 голос
/ 19 июня 2019

У меня класс с моей логикой.

класс BlogApp

   class BlogApp
   {
    public static $app;

    public function __construct()
    {
        self::$app = Registry::instance();
        $this->getParams();
    }

класс Registry

   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');

где моя ошибка?

1 Ответ

2 голосов
/ 19 июня 2019

Вы создаете объект Registry в конструкторе в классе BlogApp, поэтому для вызова метода getProperty вам необходимо создать объект BlogApp.

Однако, если вы хотите вызвать функцию getProperty со ссылкой на класс, не создавайте экземпляр Registry в конструкторе BlogApp.

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...