我试图访问类私有数组中的函数,但是我遇到了错误:
解析错误:第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'];
}
}
我不知道为什么。在课外,这种作业没有问题。
答案 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