我正在编写一个非常简单的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。
答案 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;
}