Я пишу очень простое PHP-приложение, которое возвращает путь к файлу с небольшой модификацией.
это мой код:
<?php class abc { private $path = __DIR__ . DIRECTORY_SEPARATOR. 'moshe' . DIRECTORY_SEPARATOR; function doPath() { echo $this->path; } } $a = new abc(); $a->doPath();
Я получаю сообщение об ошибке:
PHP Parse error: syntax error, unexpected '.', expecting ',' or ';' in /mnt/storage/home/ufk/1.php on line 4 Parse error: syntax error, unexpected '.', expecting ',' or ';' in /mnt/storage/home/ufk/1.php on line 4
по какой-то причине я не могу добавить connect __DIR__, используя '.' к другой строке. что мне не хватает?
используя PHP 5.5.13.
Вы не можете определить классы полей динамически
private $a = 5 + 4; // wont work, has to be evaluated private $a = 9; // works,because static value
Ваше решение:
class abs{ private $path; public function __construct(){ $this->path = __DIR__ . DIRECTORY_SEPARATOR. 'moshe' . DIRECTORY_SEPARATOR; } }
Вы не можете вычислять свойства в своем определении класса .
Если вам нужна переменная, которая будет инициализирована значением по умолчанию, которое может быть определено только выражением, вы можете сделать это с помощью конструктора.
public function __construct () { $this -> path = __DIR__ . DIRECTORY_SEPARATOR. 'moshe' . DIRECTORY_SEPARATOR; }
Тем не менее, вышесказанное является очень плохим дизайном по разным причинам, в который я не войду. Вы намного лучше передаете путь в качестве аргумента, так как это позволит вам получить большую гибкость. Например, если вы хотите протестировать класс, вы можете записать его в другое место при его тестировании и не влиять на данные в реальном времени.
public function __construct ($path) { if (!is_dir ($path)) { // Throwing an exception here will abort object creation throw new InvalidArgumentException ("The given path '$path' is not a valid directory"); } $this -> path = $path; }