Что происходит, когда объявляется $$ [имя объекта]? - PullRequest
1 голос
/ 23 октября 2010

Я пытался отладить скрипт PHP, когда натолкнулся на объявление вроде:

$cart = new form;
$$cart = $cart->function();

Что такое $$cart?

Ответы [ 2 ]

1 голос
/ 23 октября 2010

PHP делает, когда вы объявляете $$cart, пытаетесь получить строковое значение объекта $cart и использовать его в качестве имени для этой переменной переменной.Это означает, что он должен вызвать магический метод __toString() своего класса.

Если в классе нет метода __toString(), это вызовет фатальную ошибку:

Исправляемая фатальная ошибка: Объект класса MyClass не может быть преобразован в строку ...

В противном случае имя $$cartпеременная переменная - это строковое значение объекта, возвращаемое этим магическим методом.

Пример с реализованным магическим методом __toString() (разные классы / имена, но похожи на ваш пример вызова кода):

class MyClass {
    public function __toString() {
        return 'foo';
    }
    public function some_method() {
        return 'bar';
    }
}

$obj = new MyClass();
$$obj = $obj->some_method();

echo (string) $obj, "\n"; // foo
echo $$obj; // bar
0 голосов
/ 13 ноября 2010

двойной $ используется для переменной переменной.

по сути, это влечет за собой второй $ вместе со словом - переменная, значение которой используется для имени первого $

т.е.-

$first  = "second";

$second = 'Goodbye';

echo $$first; // Goodbye
...