相关疑难解决方法(0)

将函数的返回值直接解释为数组

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)

php

7
推荐指数
1
解决办法
184
查看次数

Smarty(和其他tpl ngins):assign和assign_by_ref

这不只是关于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不介意大数组,副本和克隆,但性能和内存明智:哪个'更好'?

编辑
对于对象,所有这些都无关紧要.始终通过引用自动分配对象.而且,由于对象是热的,也许这是一个过时的问题,但我感到 …

php template-engine smarty pass-by-reference

3
推荐指数
1
解决办法
1495
查看次数

标签 统计

php ×2

pass-by-reference ×1

smarty ×1

template-engine ×1