объявление атрибута класса

Некоторое время я не использовал 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

Это объявление может включать инициализацию, но эта инициализация должна быть постоянным значением, то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.