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

时间:2014-02-21 11:16:04

标签: php

我试图访问类私有数组中的函数,但是我遇到了错误:

解析错误:第17行的CODE中的语法错误,意外'(',期待')'解析CODE的错误

这是我的代码:

<?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'];

    }

}

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

2 个答案:

答案 0 :(得分:3)

那是因为当前你不能在你的属性默认值中有任何东西,但是那些没有运行时评估的东西。这意味着 - 如果某些事情将在运行时进行评估,则不能在属性默认值中使用它。

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

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将会发布,constant expressions将可用于此类情况。它们不允许您在那里使用任何,但肯定会允许更宽的默认值定义。

要理解此限制,您需要了解属性的语法有意定义默认属性值,该值不能是动态的。即“默认”本身意味着必须在启动上下文中知道该值。

答案 1 :(得分:1)

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

有关详情,请参阅PHP documentation