PHP中有没有办法直接将函数的返回值解释为数组?
让我说我有一个功能:
function getArray() {
return array("foo", "bar");
}
Run Code Online (Sandbox Code Playgroud)
而不是写:
$array = getArray();
$var = $array[1];
Run Code Online (Sandbox Code Playgroud)
我想直接访问"bar"有点像:
$var = getArray()[1]; //this causes an error
Run Code Online (Sandbox Code Playgroud) 这不只是关于Smarty,但我猜大多数模板引擎都有变量分配.这更像是一个理论问题,而不是一个实际问题.我没有用例.
将大数组分配$a给另一个变量时,PHP会发生什么$b?PHP复制数组?也许,只是可能,在内部它创建一个指针.那么当你$a稍微改变一下会发生什么?$b不应该改变,因为没有&用来创建$b.PHP只是内存使用量的两倍?
更具体地说:当您从Controller($a)向模板引擎($tpl->vars['a'])分配大数组并在视图(extractto $a)中使用时会发生什么?PHP的内存只有三倍?
现在如果我通过引用分配所有变量会发生什么?我很酷,我的观点是能够将阵列改回控制器(无论如何我都不会回到那里).如果变量在templat引擎($tpl->vars['a'])中发生变化,那也没关系.
是否更好地为内存分配所有变量?性能更好?如果是这样的话:任何奇怪的,不必要的副作用的可能性?
因为人们喜欢代码而非故事:
// copies
$a = array( ... );
$tpl->assign('a', $a); // creates a copy (?) in $tpl->vars['a']
// pointer / by ref
$a = array( ... );
$tpl->assign_by_ref('a', $a); // creates a pointer in $tpl->vars['a'] because:
function assign_by_ref( $name, &$var ) {
$this->vars[$name] = $var; // voila pointer?
}
Run Code Online (Sandbox Code Playgroud)
我很确定PHP不介意大数组,副本和克隆,但性能和内存明智:哪个'更好'?
编辑
对于对象,所有这些都无关紧要.始终通过引用自动分配对象.而且,由于对象是热的,也许这是一个过时的问题,但我感到 …