在课堂上使用__DIR__

时间:2014-07-03 07:34:30

标签: php 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

出于某种原因,我无法使用&#39;添加连接 __ DIR __ 。&#39;到另一个字符串。我错过了什么?

使用PHP 5.5.13。

2 个答案:

答案 0 :(得分:10)

您无法动态定义类字段

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;
  }
}

答案 1 :(得分:2)

You can't calculate properties in their class definition

如果需要将变量初始化为只能由表达式确定的默认值,则可以使用构造函数执行此操作。

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;
}