Некоторое время я не использовал PHP, но я пробовал что-то вроде этого:
<?php class Something { public $x = 2 * 3; // (line 4) }
Этот код вызывает следующую ошибку:
[Wed Feb 13 17:43:56 2013] [error] [клиент 127.0.0.1] Ошибка анализа PHP: синтаксическая ошибка, неожиданные '*', ожидающие ',' или ';' в /var/www/problem.php в строке 4
В документации по PHP
эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.
Итак, согласно документам, мой код должен работать. Здесь что-то не хватает?
При объявлении членов класса вы можете назначать им значения, но вы не можете выполнять сложные операции, такие как математические или функциональные вызовы.
<?php class Something { public $x = 2 * 3; // (line 4) }
возможно:
<?php class Something { public $x = 6; // (line 4) }
Поэтому в вашем случае вы захотите инициализировать это значение в своем конструкторе.
<?php class Something { public $x; public function __construct() { $this->x = 2 * 3; } }
Если вы на самом деле внимательно прочитали документацию, с которой вы ссылаетесь в примерах, в ней четко сказано, что это запрещено:
class SimpleClass { // invalid property declarations: // (some examples here) public $var3 = 1+2; }
Это означает, что умножение также не будет работать.
Итак, согласно документам, мой код должен работать.
В документах четко указано: «он должен быть способен оцениваться во время компиляции и не должен зависеть от информации о времени выполнения»
2 * 3
– оценка времени выполнения.
public $x = 6;
должно сработать.
Оценка времени выполнения 2 * 3
не допускается.
Как говорят DOCS
Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.