我正在使用模板引擎在我想要的网站中插入代码.
我写了一个函数来测试一些非常简单的东西:
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或更早版本中,您将需要使用临时变量.
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)
这不是很好但是有效.