Туннелирование двух или более объектов - PullRequest
0 голосов
/ 03 июля 2010

У меня есть два отдельных объекта, главный и «дочерний».Физически это не настоящий дочерний объект, потому что я добавляю целого родителя через конструктор к дочернему элементу.

Вот так:

class core
{

    public function __get($class)
    {
        $this->load($class);
    }

    public function load($class, $file = null, $lib = true)
    {
        if($file == null)
            $file = $class;

        if($lib == true)
            include(LIBPATH.$file.PHP);
        else
            include(SYSPATH.$file.PHP);

        $this->$class = new $class($this);
    }

}

И "потомок":

class Child implements myStruct
{
    public function __construct($obj)
    {
         $this->obj =& $obj;
    }
}

Это так уродливо, как я думаю, или это решение приемлемо?

1 Ответ

3 голосов
/ 03 июля 2010

Это определенно неоптимально.Первое:

$this->obj =& $obj;

В этом нет необходимости.Начиная с PHP 5, объекты ссылаются в пространстве пользователя через ссылки.Когда вы копируете объект, вы фактически копируете ссылку.Вы можете оставить оператор ссылки здесь: $this->obj = $obj.

Посмотрите spl_autoload для автозагрузки классов.Это не эквивалентно тому, что вы делаете - вы используете какой-то контейнер для хранения ссылок на объекты (и только один объект на класс), но я подозреваю, что вы этого хотите.

...