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();
这是为应用程序创建实例的状态
class Yii extends 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];