定义对象属性时无法运行函数?

时间:2015-05-26 04:52:31

标签: php oop

有问题的代码......

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

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

  

解析错误:语法错误,意外'(',期待','或';'在...中   blah blah blah

我猜对象属性与PHP变量不同。

2 个答案:

答案 0 :(得分:4)

那是对的。来自docs

  

此声明可能包含初始化,但此初始化必须是常量值 - 也就是说,它必须能够在编译时进行评估,并且不能依赖于运行时信息。为了评估。

由于dirname是一个运行时函数,因此应该在Object的构造函数中调用它。因此,在对象构造函数中设置$template_default

class MyClass {
    public $template_default;

    public function __construct(){
         $this->template_default = dirname(__FILE__). "/default.tpl";
    }
}

答案 1 :(得分:1)

如果您使用的是PHP 5.6,则可以执行以下操作:

class MyClass
{
    public $template_default = __DIR__."/default.tpl";
}

PHP 5.6允许在初始化(docs)中进行简单的标量数学和字符串连接,__DIR__dirname(__FILE__)相同。

否则,德雷克斯'答案是对的。