Что это означает: $ foo = new $ foo ();?

Я никогда раньше не видел ничего подобного.

$dbTable = new $dbTable();

Мы храним экземпляр объекта внутри $ dbTable?

Преобразуем ли мы строку в объект?

Вот контекст:

protected $_dbTable;

    public function setDbTable($dbTable)
    {
        if (is_string($dbTable)) {
            $dbTable = new $dbTable();
        }
        if (!$dbTable instanceof Zend_Db_Table_Abstract) {
            throw new Exception('Invalid table data gateway provided');
        }
        $this->_dbTable = $dbTable;
        return $this;
    }

Из руководства по php здесь: http://www.php.net/manual/en/language.oop5.basic.php

Мы можем прочитать:

Если строка, содержащая имя class используется с новым, новым экземпляром этого класса будет создан. Если класс находится в пространстве имен, его полностью полное имя должно использоваться при выполнении this.

Но это похоже на операцию конкатенации между строкой и этими "вещами": () - без использования точки. Так что я все еще не уверен, что здесь происходит.

6
задан MEM 8 May 2011 в 12:46
поделиться