gpt4 book ai didi

design-patterns - Yii 使用单例吗?

转载 作者:行者123 更新时间:2023-12-01 09:27:27 25 4
gpt4 key购买 nike

Yii 我可以做到:

$model = ModelName::model();

我可以从任何地方调用它,它总是会返回相同的实例

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

我看到的唯一区别是 __construct__clone__wakeup 不 protected 。

最佳答案

是的,YII 应用程序对象是一个单例。如果你看到 Yii 入口文件,即 index.php,你可以找到语句

   Yii::createWebApplication($configFile)->run();

这是为您的应用程序创建实例的状态。

  1. Yii 是一个类,它扩展了 YiiBase。

       class Yii extends YiiBase{}
  2. createWebApplication() 是 YiiBase 类中的一个静态函数。该函数返回CWebApplication类的对象。

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

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

查看更多

    <?php
echo "<pre>";
print_r(Yii::app());
echo "</pre>";
?>

在模型方面,YII 还为 Active Records 模型实现了单例模式。

  1. 转到 yii/framework/yiilite.php。

  2. 找到CActiveRecord抽象类,搜索function model()

    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];

也许这会给你更多的信息。

关于design-patterns - Yii 使用单例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20770742/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com