为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
隔江千里 2021-08-28 16:23:20
我有我的逻辑课。类 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');我的错误在哪里?
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-08-28
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信