【问题标题】:You can't run a function when defining an object property?定义对象属性时不能运行函数?
【发布时间】:2015-05-26 04:52:30
【问题描述】:

有问题的代码...

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

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

解析错误:语法错误,意外的 '(',期待 ',' 或 ';' in ... 哈哈哈哈哈哈

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

【问题讨论】:

    标签: php oop


    【解决方案1】:

    没错。来自docs

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

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

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

    【讨论】:

    • 谢谢!之前没有意识到定义属性。
    【解决方案2】:

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

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

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

    否则,德雷克斯的答案是正确的。

    【讨论】:

      猜你喜欢
      • 2022-06-12
      • 2013-11-09
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 1970-01-01
      相关资源
      最近更新 更多