如何检查模型是否具有特定属性?

时间:2012-06-14 06:51:41

标签: php oop object yii

我想创建一个新的模型类,它将在所有其他类中扩展。我想在admin为addind / edit任何记录时自动设置一些字段。即createdDate,createdIp,updatedDate,updatedIp..etc。

现在我的问题所有字段在所有模型中都不常见。所以我想检查对象是否有createdDate属性然后只设置它的值。如果没有条件且模型没有创建日期成员那么它将生成错误。下面是我正在尝试的代码。但它没有用。

public function beforeSave()
{ 
            if(isset($this->createdDate))
                    die('this model have createdDate field');
            else
                    die('this model does not have createdDate field');
}

模型可能不会直接,它可能会自动扩展数据库表的相关类。下面是打印对象。 createdDate字段位于私人列表中。

如果我使用的是var_dump(property_exists($this, 'createdDate'));,那就是假的。

AdvertisementRate Object
(
    [bannerLocation_search] => 
    [bannerType_search] => 
    [_md:private] => CActiveRecordMetaData Object
        (
            [tableSchema] => CMysqlTableSchema Object
                (
                    [schemaName] => 
                    [name] => tbl_advertisement_rate
                    [rawName] => `tbl_advertisement_rate`
                    [primaryKey] => advertisementRateId
                    [sequenceName] => 

                    [columns] => Array
                        (
                            [createdDate] => CMysqlColumnSchema Object
                                (
                                    [name] => createdDate
                                    [rawName] => `createdDate`
                                    [allowNull] => 
                                    [dbType] => datetime
                                    [type] => string
                                    [defaultValue] => 
                                    [size] => 
                                    [precision] => 
                                    [scale] => 
                                    [isPrimaryKey] => 
                                    [isForeignKey] => 
                                    [autoIncrement] => 
                                    [_e:private] => 
                                    [_m:private] => 
                                )

请帮我添加这个逻辑。


是的.CActiveRecord扩展到我的班级。

MasterAdmin.php

class MasterAdmin extends CActiveRecord
{
    public function beforeSave()
    { 
                echo '<pre>';
                var_dump(property_exists($this, 'createdDate')); 
                exit;
    }
}

user.php的

class User extend MasterAdmin 
{
   // So whenever any record added or edited, beforeSave will be called and i can autoset createddate value.

}

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

property_exists()正是您要找的。

这样,如果属性存在但设置为NULL,则上述函数将返回true,而isset()将返回false,导致您认为该属性不存在

适合我。见example

相关问题