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

时间:2009-09-22 10:52:36

标签: php arrays

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

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

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

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

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

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

有什么想法吗?

5 个答案:

答案 0 :(得分:132)

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

getSomeArray()[2]

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

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

答案 1 :(得分:16)

你不能使用这样的东西:

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

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

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

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

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

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

你必须:

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

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

答案 2 :(得分:12)

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

我创建了这个函数:

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

并像这样使用它:

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

这不太好但有效。

答案 3 :(得分:1)

$this ->data 始终可访问,如果受到保护。无法从任何地方访问 $object ->data,因此,如果您在代码中返回$this,并且对其进行评估,则应该没问题。

顺便说一句,你的代码中有一个错误:引号需要转义。

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

答案 4 :(得分:1)

可以从PHP 5.4版开始。

如果您不希望的临时变量而您的PHP版本低于5.4 ,那么您仍然可以使用一些内置函数来获取第一个或最后一个元素:

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

修改 !请注意,在更高版本(5.4+)中,PHP将发出通知,因为end只需要将变量作为参数。