1

これを使用すると、_setメソッドfetch_object('classname')_construct . では、 __setメソッドを呼び出す前にオブジェクトをインスタンス化するにはどうすればよいでしょうか。

4

1 に答える 1

1

this Bug/Feature is an interesting PHP Flaw. It is handy in cases like this:

class MyModel {

    public $id;
    public $column2;
    public $column3;

    public function __construct() {
        //work with prefilled properties from database here
    }
}

$model = $mysqli->query()->fetch_object('MyModel');

and it even works in this case:

class MyModel {

    public $data;

    public function __construct() {
        //work with $this->data here
    }

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

$model = $mysqli->query()->fetch_object('MyModel');

but it bites you in cases like this:

class MyModel {

    public $data;

    public function __construct($someOtherService) {
        $this->service = $someOtherService;
    }

    public function __set($name, $value) {
        $this->service->workWith($name, $value);
        $this->data[$name] = $value;
    }
}

$model = $mysqli->query()->fetch_object('MyModel');
于 2012-11-05T15:17:58.297 に答える