Есть ли какой-нибудь короткий способ загрузить данные в свойства класса, чтобы каждое имя столбца соответствовало свойствам класса? - PullRequest
2 голосов
/ 16 ноября 2011

Я хочу загрузить данные в экземпляр объекта, используя его конструктор, и каждый раз для каждого свойства пишу

$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 голосов
/ 16 ноября 2011

Вы ничего не можете присвоить $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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...