Проблема в вашем объявлении класса не то, что вы используете постоянный, но что вы используете выражение.
Переменные элемента класса называются «свойствами». (...) Они определяются с использованием одного из ключевых слов public, protected или private, за которым следует объявление нормальной переменной. Это объявление может включать инициализацию,
, но эта инициализация должна быть постоянным значением - то есть она должна быть способна быть оценена во время компиляции и не должна зависеть от информации о времени выполнения для оценки.
Этой простая декларация, к примеру, не будет компилировать (ошибка синтаксического анализа):
class MyClass{
private $myvar = 3+2;
}
Но если мы изменим ваше объявление класса использовать простую константу, а не строки, сцепленные с этим константой она будет работайте, как ожидалось.
class MyClass{
const myconst = 'somevalue';
public $myvar = array(0 => self::myconst);
}
$obj = new MyClass();
echo $obj->myvar[0];
В обходным можно инициализировать свои свойства в конструкторе:
class MyClass{
const myconst = 'somevalue';
public $myvar;
public function __construct(){
$this->myvar = array(0 => 'do something with '.self::myconst);
}
}
$obj = new MyClass();
echo $obj->myvar[0];
Я надеюсь, что это поможет вам,
Алинского
Если вы ищете что-то вроде макроса C, PHP не работает таким образом. кроме того, нет «времени компиляции». PHP является интерпретатором. – stillstanding 2010-11-28 14:37:09
Люди, написавшие руководство, похоже, находятся под впечатлением, что существует «время компиляции». http://www.php.net/manual/en/language.oop5.properties.php – 2010-11-28 14:50:54