php中函数返回的访问数组

php中函数返回的访问数组,php,arrays,Php,Arrays,我正在使用一个模板引擎,在我想要的地方插入代码 我编写了一个函数来测试一些非常简单的东西: myfunction() { return '($this->data["a"]["b"] ? true : false)'; } 问题是,$this->data是私有的,我不能在任何地方访问它,所以我必须使用getData();这导致了我的问题 $this->getData()['a']['b'] 不起作用,并且首先赋值也不起作用,因为它将直接在if()块中使用 有什么想法吗?你不能用这

我正在使用一个模板引擎,在我想要的地方插入代码

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

myfunction() { return '($this->data["a"]["b"] ? true : false)'; }
问题是,$this->data是私有的,我不能在任何地方访问它,所以我必须使用getData();这导致了我的问题

$this->getData()['a']['b']
不起作用,并且首先赋值也不起作用,因为它将直接在if()块中使用


有什么想法吗?

你不能用这样的东西:

$this->getData()['a']['b']
$tmp = $this->getData();
$tmp['a']['b']    // use $tmp, now
function myfunction() {
  $tmp = $this->getData();
  return ($tmp['a']['b'] ? true : false);
}
也就是说,数组访问语法不能直接用于函数调用

您必须使用一些临时变量,如:

$this->getData()['a']['b']
$tmp = $this->getData();
$tmp['a']['b']    // use $tmp, now
function myfunction() {
  $tmp = $this->getData();
  return ($tmp['a']['b'] ? true : false);
}
在您的情况下,这可能意味着使用如下内容:

$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()
    方法,并将其返回值存储在临时变量中
  • 然后,在测试中使用该临时变量
实际上,在这方面您没有太多的选择…

$如果数据受到保护,它总是可以访问的
$object
->数据不可从任何地方访问,因此,如果您在代码中返回
$this
,并对其进行评估,则应该可以

顺便说一句,代码中有一个bug:引号需要转义

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

好的。。。显然没有更好的方法了,所以我将用一个不太漂亮的解决方案来回答自己:

我创建了函数:

arrayGet($array, $index) { return $array[$index]; }
然后像这样使用它:

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

这并不漂亮,但很有效。

因为PHP 5.4,所以可以做到:

getSomeArray()[2]
参考:


在PHP5.3或更早版本上,您需要使用一个临时变量。

可以从PHP5.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只希望变量作为参数。

指定返回值肯定有效,而且是唯一的方法。您能给我们看一下您的非工作代码吗?它不工作,因为代码将插入if(/*code here*/)中。所以我不能只分配数据。你到底在建什么?:)关于eval的事?你想检查什么?是否尝试查看数组元素是否存在并且是否具有非空值?您可以为此使用函数“empty”。这个问题需要澄清!您在
myfunction()
中返回的字符串值是如何进一步处理的?你的问题中缺少了这一部分。正如我所说,我的问题是,这段代码直接插入if(/*代码在这里*/)中,因此在那里定义一个函数实际上是不可能的……你不能在if语句之前将方法调用的结果赋给一个变量,然后在if语句中使用该变量吗,而不是直接尝试从if语句调用方法?不幸的是没有。。。这是一个模板引擎,我无法控制它。是的,对不起。。。我更正了我的帖子:$this->数据当然是私有的。还更正了创建错误时的输入错误。我有
PHP5.4.11-1~precise+1
,但此功能不起作用!在响应中得到消息
解析错误:语法错误,意外“[”
+Eugene你让它工作了吗?可能其他人也遇到了同样的问题。直到php 5.4才支持从函数返回的数组符号?!多么讨厌的错误。然后你尝试获取由数组过滤器生成的数组的第一个元素并开始哭泣