访问数组由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作为参数。