php中的函数返回的访问数组

eny*_*nyo 88 php arrays

我正在使用模板引擎在我想要的网站中插入代码.

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

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

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

$this->getData()['a']['b']
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?

eny*_*nyo 132

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

getSomeArray()[2]
Run Code Online (Sandbox Code Playgroud)

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

在PHP 5.3或更早版本中,您将需要使用临时变量.

  • 我有'PHP 5.4.11-1~precision + 1`这个功能不起作用!收到消息`解析错误:语法错误,意外'['` (4认同)
  • 直到php 5.4才支持从函数返回的数组符号?!多么讨厌的bug. (2认同)

Pas*_*TIN 16

你不能使用这样的东西:

$this->getData()['a']['b']
Run Code Online (Sandbox Code Playgroud)

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

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

$tmp = $this->getData();
$tmp['a']['b']    // use $tmp, now
Run Code Online (Sandbox Code Playgroud)

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

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

你必须 :

  • 首先,调用您的getData()方法,并将其返回值存储在临时变量中
  • 然后,使用该临时变量进行测试

你没有太多选择,实际上......


eny*_*nyo 12

好吧......显然确实没有更好的方法,所以我将用一个不那么漂亮的解决方案回答自己:

我创建了这个函数:

arrayGet($array, $index) { return $array[$index]; }
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

myfunction() { return '(arrayGet(arrayGet($this, "a"), "b") ? true : false)' }
Run Code Online (Sandbox Code Playgroud)

这不是很好但是有效.