在定义对象属性时不能运行函数


You can't run a function when defining an object property?

有问题的代码…

class MyClass
{
    public $template_default = dirname(__FILE__)."/default.tpl";
}

为什么在定义对象属性时尝试使用dirname()函数时会出现以下错误?

解析错误:语法错误,意外'(',期待','或';'在…废话废话

我猜对象属性不像PHP变量。

没错。来自文档:

这个声明可以包含一个初始化,但是这个初始化必须是一个常量值——也就是说,它必须能够在编译时求值,并且不能依赖于运行时信息来求值。

由于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允许简单的标量数学和字符串连接初始化现在(文档),__DIR__是一样的dirname(__FILE__)