对于与类的属性匹配的每个列名,是否有任何简短的方法将数据加载到类的属性?

时间:2011-11-16 01:23:37

标签: php oop class properties iterator

我想使用构造函数将数据加载到对象的实例,然后编写

$this->property=$row["colname"] 

每个属性的每次。

mysql_fetch_object函数将数据作为对象获取,但我不确定是否可以从内部将对象的实例分配给某个对象。我会用

__construct($object) { $this=$object; } //doesn't give any syntax error

也许我应该研究属性的迭代并使用

foreach($object as $key => $value) $value=$object[$key];

或者我可以指定

$this=$object;

在构造函数中?

1 个答案:

答案 0 :(得分:0)

您无法将任何内容分配给$this,否则您将收到错误。

我会做这样的事情:

class SomeObject 
{
    function __construct($base = null)
    {
        if ($base != null)
        {
            $this->load($base);
        }

        // continue construction as you normally would
    }

    function load($object)
    {
        foreach ($object as $key => $value)
        {
            $this->$key = $value;
        }
    }
}

然后您可以选择在构建时将数组加载到对象中,或者在构建之后通过load()加载数组。


用法示例:

$rows = array('id' => 1, 'name' => 'Foo');

// create an empty SomeObject instance
$obj = new SomeObject();
var_dump($obj);

// load $rows into the object
$obj->load($rows);
var_dump($obj);

// create an instance of SomeObject based on $rows
$rows2 = array('id' => 2, 'name' => 'Bar');

$obj2 = new SomeObject($rows2);
var_dump($obj2);

演示:http://codepad.org/uV7bOrfL