Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns Yii使用单例吗?_Design Patterns_Yii_Singleton - Fatal编程技术网

Design patterns Yii使用单例吗?

Design patterns Yii使用单例吗?,design-patterns,yii,singleton,Design Patterns,Yii,Singleton,在Yii中,我可以做: $model = ModelName::model(); 我可以从任何地方调用它,它将始终返回相同的实例 那么,我可以决定Yii使用Singleton模式吗 唯一不同的是,我看到的是,\uuu构造,\uu克隆,\uu唤醒未受保护。是的,在这种情况下它是一个单音,但当它与查找器方法一起使用时(ModelName::model()->find($condition,$params),ModelName::model()->findAll($condition,$params

Yii
中,我可以做:

$model = ModelName::model();
我可以从任何地方调用它,它将始终返回相同的实例

那么,我可以决定
Yii
使用
Singleton
模式吗


唯一不同的是,我看到的是,
\uuu构造
\uu克隆
\uu唤醒
未受保护。

是的,在这种情况下它是一个单音,但当它与查找器方法一起使用时(
ModelName::model()->find($condition,$params),ModelName::model()->findAll($condition,$params)…等
)没有受保护的in构造函数的原因是,我们需要在大多数情况下通过关键字“new”(新建)创建实例
new ModelName
来创建属性尚未设置的实例。您可以在创建控制器操作中看到这一点。

是的,YII应用程序对象是单例。如果您看到Yii条目文件ie,index.php,您可以找到该语句

   Yii::createWebApplication($configFile)->run();
这是为应用程序创建实例的状态

  • Yii是一个类,它扩展了YiiBase

       class Yii extends YiiBase{}
    
  • createWebApplication()是类YiiBase中的静态函数。此函数返回
    CWebApplication
    类的对象

    public static function createWebApplication($config=null)
    {
         return self::createApplication('CWebApplication',$config);
    }
    
  • createAppliction('CWebApplication',$config)
    创建
    CWebApplication
    的对象并返回该对象

  • 现在,可以使用
    Yii::app()
    在应用程序中的任何位置访问此应用程序单例

    查看更多

        <?php
        echo "<pre>";
        print_r(Yii::app());
        echo "</pre>";
        ?>
    
    明白这句话吗


    也许这会给你更多信息。

    那么,如果是单身,当你的解释看起来是单身时,你有什么疑问要问这个问题呢?我认为这是一个好问题。只是为了澄清。但是如果我们有可能编写新的ModelName,我们可以称之为
    单例
    ?来自
    Wiki
    :单例模式是一种设计模式,它将类的实例化限制为一个对象。那么
    模型对象
    呢?
    public static function model($className = __CLASS__)
    {
        if (isset(self::$_models[$className]))
            return self::$_models[$className];
        else
        {
            $model = self::$_models[$className] = new $className(null);
            $model->attachBehaviors($model->behaviors());
            return $model;
        }
    }
    
        if(isset(self::$_models[$className]))
            return self::$_models[$className];