【发布时间】:2015-05-26 04:52:30
【问题描述】:
有问题的代码...
class MyClass
{
public $template_default = dirname(__FILE__)."/default.tpl";
}
当我在定义对象属性时尝试使用dirname() 函数时,为什么会出现以下错误?
解析错误:语法错误,意外的 '(',期待 ',' 或 ';' in ... 哈哈哈哈哈哈
我猜对象属性不像 PHP 变量。
【问题讨论】:
有问题的代码...
class MyClass
{
public $template_default = dirname(__FILE__)."/default.tpl";
}
当我在定义对象属性时尝试使用dirname() 函数时,为什么会出现以下错误?
解析错误:语法错误,意外的 '(',期待 ',' 或 ';' in ... 哈哈哈哈哈哈
我猜对象属性不像 PHP 变量。
【问题讨论】:
没错。来自docs:
这个声明可能包含一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时被评估,并且不能依赖于运行时信息要评估的顺序。
由于dirname是一个运行时函数,它应该在Object的构造函数中调用。所以,在对象构造函数中设置$template_default:
class MyClass {
public $template_default;
public function __construct(){
$this->template_default = dirname(__FILE__). "/default.tpl";
}
}
【讨论】:
如果您使用的是 PHP 5.6,您可以执行以下操作:
class MyClass
{
public $template_default = __DIR__."/default.tpl";
}
PHP 5.6 现在允许在初始化时进行简单的标量数学和字符串连接 (docs),__DIR__ 与 dirname(__FILE__) 相同。
否则,德雷克斯的答案是正确的。
【讨论】: