访问数组由PHP中的函数返回

我正在使用模板引擎,在我想要的位置插入代码。

我写了一个函数来testing一些非常简单的东西:

myfunction() { return '($this->data["a"]["b"] ? true : false)'; } 

问题是,$ this-> data是私有的,我无法在任何地方访问它,所以我必须使用getData(); 这导致我的问题。

 $this->getData()['a']['b'] 

不起作用,并且首先分配值不会因为它将直接在if()块中使用。

有任何想法吗?

从PHP 5.4开始,可以做到这一点:

 getSomeArray()[2] 

参考: https : //secure.php.net/manual/en/language.types.array.php#example-62

在PHP 5.3或更早版本中,您将需要使用一个临时variables。

你不能使用这样的东西:

 $this->getData()['a']['b'] 

即数组访问语法不可能直接在函数调用中使用。

你必须使用一些临时variables ,如下所示:

 $tmp = $this->getData(); $tmp['a']['b'] // use $tmp, now 

在你的情况下,这可能意味着使用这样的东西:

 function myfunction() { $tmp = $this->getData(); return ($tmp['a']['b'] ? true : false); } 

你必须 :

  • 首先,调用你的getData()方法,并将其返回值存储在临时varibale中
  • 然后,使用该临时variables进行testing

实际上你没有多lessselect

好的…显然这里真的没有更好的方法,所以我要用一个不太好的解决scheme来回答自己:

我创build了这个function:

 arrayGet($array, $index) { return $array[$index]; } 

像这样使用它:

 myfunction() { return '(arrayGet(arrayGet($this, "a"), "b") ? true : false)' } 

这不漂亮,但工程。

$this ->data 总是可访问的,如果它被保护的话。 $object ->data无法从任何地方访问,所以如果你在你的代码中返回$this ,并且这样评估,那应该没问题。

顺便说一句,在你的代码有一个错误:引号需要逃脱。

 myfunction() { return '($this->data[\'a\'][\'b\'] ? true : false)'; } 

从PHP版本5.4是可能的。

如果你不需要一个临时variables而你的PHP版本比5.4版less,你仍然可以使用一些内置函数来获取第一个或最后一个元素:

 $x = 'first?last'; $first = array_shift(explode('?', $x)); $last = end(explode('?', $x)); $last2 = array_pop(explode('?', $x)); 

编辑: !!! 请注意,在更高版本(5.4+)中,PHP将会发出通知,因为end仅仅需要variables作为参数。