Почему я не могу установить переменную 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
Вы не можете иметь выражения в объявлениях переменных. Вы можете использовать только постоянные значения. 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 в классе