为什么类的私有数组中没有函数

  • 本文关键字:数组 函数 php
  • 更新时间 :
  • 英文 :


我尝试访问类私有数组中的函数,但出现错误:

解析错误:语法错误,第 17 行代码中出现意外的"(",预期")" 解析代码时出错

这是我的代码:

<?php
function foo_function () {
    return 'foo_value';
}
class foo {
    private $good_foo_var = array (
        'foo_key' => 'anything'
    );
    private $bad_foo_var = array (
        'foo_key' => foo_function ()
    );
    public function get_the_foo () {
        return $this -> foo_var['foo_key'];
    }
}

我不知道为什么。在课堂之外,这种作业是没有问题的。

这是因为当前属性默认值中不能有任何内容,而是不能在运行时计算的内容。这意味着 - 如果某些东西将在运行时被评估,则不能在属性默认值中使用。

要克服这个问题,请使用类构造函数:

class foo 
{
    private $good_foo_var = array (
        'foo_key' => 'anything'
    ); 
    public function get_the_foo () 
    {
        return $this -> foo_var['foo_key'];
    }
    public function __construct()
    {
        $this->bad_foo_var = array (
           'foo_key' => foo_function ()
        );
    }
}

但是,由于 PHP 5.6 将发布,因此在这种情况下可以使用常量表达式。它们不允许您在那里使用任何内容,但肯定会允许更广泛的默认值定义。

要理解此限制,您需要了解属性的语法旨在定义默认属性值,该值不能是动态的。 即"默认"本身的感觉假设值必须在启动上下文中已知。

类中定义的属性在编译时实例化。这意味着不计算该值,但必须是常量值。函数返回值不是常量值,因此必须在运行时进行评估。为此,您应该在构造函数中实例化它们。

有关更多信息,请参阅 PHP 文档

最新更新