yii中ActiveRecord和model()之间的区别?

yii中ActiveRecord和model()之间的区别?,yii,yii-cmodel,yii-cactiverecord,Yii,Yii Cmodel,Yii Cactiverecord,在YII中,ActiveRecord和model之间有什么关系或区别 我试图记录is_对象(CActiveRecord::model('Project')并预期为false,但返回true 因为日志显示它是一个对象,所以我认为它代表了表中的一行,但是我找不到任何表示冒号的属性 还声明它正在返回CActiveRecord类的实例,但我在该对象中找不到表行的任何值 ActiveRecord是一种模式。在关系数据库中存储数据的模式。在MVC模式中,模型是数据的一部分。所以,Yii是一个MVC框架,用于

在YII中,ActiveRecord和model之间有什么关系或区别

我试图记录
is_对象(CActiveRecord::model('Project')
并预期为
false
,但返回
true

因为日志显示它是一个对象,所以我认为它代表了表中的一行,但是我找不到任何表示冒号的属性


还声明它正在返回
CActiveRecord
类的实例,但我在该对象中找不到表行的任何值

ActiveRecord是一种模式。在关系数据库中存储数据的模式。在MVC模式中,模型是数据的一部分。所以,Yii是一个MVC框架,用于实现模型的ActiveRecord

模型方法是这样的

public static function model($className=__CLASS__)
{
    if(isset(self::$_models[$className]))
        return self::$_models[$className];
    else
    {
        $model=self::$_models[$className]=new $className(null);
        $model->_md=new CActiveRecordMetaData($model);
        $model->attachBehaviors($model->behaviors());
        return $model;
    }
}

如您所见,返回一个对象

答案在您的文档链接中,
model()
是一个类级方法,它:

返回指定AR类的静态模型。返回的模型是AR类的静态实例。它用于调用类级方法(类似于静态类方法

假设您这样做:
$model=CActiveRecord::model('Project')
,然后使用该
$model
可以调用CActiveRecord的所有类级方法,如:

$allModels = $model->findAll(); // will give you all the models of Project
$someModel = $model->findByPk('pkValue'); // will give you the row with primary key value = pkValue 
$model->deleteAll(); // will delete all the records of Project
// and so on
编辑:

论坛上还提到:(类级和静态方法之间的区别)

类级方法是有效的静态方法,但其优点是能够使用继承。也就是说,可以重写子类中类级方法的操作,而如果使用静态方法,则无法重写它。 .... 因此,一般来说,您应该使用类级方法,而不是静态方法,因为它提供了继承的好处,尽管它可能会感觉有点奇怪。然后使用$class::model()->method()调用它们


与Yii一起工作了几个月后,我发现ActiveRecord类同时处理ActiveRecord和模型,这真的很奇怪。我觉得很奇怪,谢谢你。简单而完整的答案。