использование __DIR__ в классе

Я пишу очень простое 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; }