Получение ошибки при попытке инициализации этой публичной переменной класса с использованием dirname () вне метода

Почему я не могу установить переменную public member с помощью функции?

<? class TestClass { public $thisWorks = "something"; public $currentDir = dirname( __FILE__ ); public function TestClass() { print $this->thisWorks . "\n"; print $this->currentDir . "\n"; } } $myClass = new TestClass(); ?> 

Выполнение этого дает:

 Parse error: syntax error, unexpected '(', expecting ',' or ';' in /tmp/tmp.php on line 7 

Solutions Collecting From Web of "Получение ошибки при попытке инициализации этой публичной переменной класса с использованием dirname () вне метода"

Вы не можете иметь выражения в объявлениях переменных. Вы можете использовать только постоянные значения. dirname() может не отображаться в этой позиции.

Если вы будете использовать PHP 5.3, вы можете использовать:

  public $currentDir = __DIR__ ; 

В противном случае вам придется инициализировать $this->currentDir в __construct или.

В соответствии с руководством по PHP ваши переменные экземпляра:

должен быть способен оцениваться во время компиляции и не должен зависеть от информации о времени выполнения для оценки

Таким образом, вы не можете использовать функцию dirname в инициализации свойства. Поэтому просто используйте конструктор, чтобы установить значение по умолчанию через:

 public function __construct() { $this->currentDir = dirname( __FILE__ ); } 

Вы не можете вызывать функции при указании атрибутов.

Используйте это вместо этого:

 <?php class TestClass{ public $currentDir = null; public function TestClass() { $this->currentDir = dirname(__FILE__); /* the rest here */ } } 

Похоже, вы не можете вызывать функции при указании значений по умолчанию для переменных-членов.

К сожалению, вы не можете вызывать функции для объявления переменных класса. Однако вы можете присвоить возвращаемое значение из dirname ( FILE ) в $ this-> currentDir из конструктора.

EDIT : Имейте в виду: конструктор в PHP => 5 называется __construct (), а не именем класса.

Вы можете использовать это вместо этого:

 public $currentDir = ''; public function TestClass() { $this->currentDir = dirname( __FILE__ ); ... 

Выражение dirname вызывает ошибку, которую вы не можете объявить как переменную. Вы могли бы это сделать.

 <? class TestClass { public $thisWorks = "something"; public $currentDir; public function __construct() { $this->currentDir = dirname( __FILE__ ); } public function test() { echo $this->currentDir; } } 

Каждый раз, когда вы создаете новый класс, dirname будет установлен в конструкторе. Я также рекомендую исключить закрывающий тег php?> В ваших файлах. Помогает устранять ошибки и отправленные заголовки

Причина в том, что вы не можете назначать переменные экземпляра, используя функции статическим образом. Это просто не разрешено в PHP.

Могу ли я предложить вам сделать это:

 <? class Foo { public $currentDir; public function __construct() { $this->currentDir = dirname(__FILE__); } } ?> 

сделайте это в конструкторе. $ this-> currentDir = dirname ( FILE );

и, кстати, print $ currentDir. "\ П"; используйте $ this при вызове vars в классе