PHP - Использование значения константы для ссылки на член данных - PullRequest
4 голосов
/ 04 августа 2010

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

Когда я пытаюсь сделать это в следующем сценарии, я получаю эту ошибку: Ошибка разбора: синтаксическая ошибка, неожиданный T_PAAMAYIM_NEKUDOTAYIM

class Certificate {
    const BALANCE = 'cert_balance';

    public function __construct() {}

}

class Ticket {
    public $cert_balance = null;

    public function __construct()
    {
        $this->cert_balance = 'not a chance';
        echo $this->cert_balance."<br />";
    }
}

$cert = new Certificate();

$ticket = new Ticket();

// This next code line should be equal to: $ticket->cert_balance = 'nice'; 

$ticket->$cert::BALANCE = 'nice!';

Ответы [ 2 ]

7 голосов
/ 04 августа 2010

Вы должны устранить неоднозначность выражения с фигурными скобками. Кроме того, до PHP 5.3 вы должны ссылаться на константу через имя класса, например:

$ticket->{Certificate::BALANCE} = 'nice!';

* * * * * * * * * * * * * * * * * * * *.

Начиная с PHP 5.3.0, можно ссылаться на класс с помощью переменной

Так что в PHP 5.3.0 и выше, это будет работать:

$ticket->{$cert::BALANCE} = 'nice!';
3 голосов
/ 04 августа 2010

Do:

$ticket->{$cert::BALANCE} = 'nice';

Таким образом, анализатор знает, что сначала он должен обработать $cert::BALANCE.Кажется, вам нужно PHP 5.3 , чтобы это работало.В противном случае используйте имя класса вместо $cert.

Дело в том, что вы должны поместить его в {}.

...