帮助我了解PHP变量引用和范围
参考文献:
首先,我认为通过了解它是如何工作的,可以正确理解通过引用(例如&$ var)的传递。
范围:
PHP非常有趣。 :(
如果我将一个变量传递给一个函数(例如$ var),是否应该是对实际变量的引用的副本(例如将其设置为null不会影响其他副本)?
取决于功能。 还有你怎么称呼它。 看看这个例子:http://www.ideone.com/LueFc
或者它是否接收到什么是实际变量的新副本的引用(例如,将其设置为空仅销毁其副本)?
再次取决于功能
如果是后者,是否在内存中复制对象和数组? 这似乎是一种浪费内存和CPU时间的好方法,如果是这样的话。
当然,它将节省内存以使用参考。 在php> 4中,除非您另外指定,否则它始终使用对象的引用。
与本地范围有什么关系? 我是否正确地观察到我可以在一个函数中声明一个数组,然后在该函数内调用的其他函数中使用该数组,而不将它作为参数传递给它们?
不,你不能。
同样,在函数内调用的函数中声明数组是否允许它在调用者中可用?
不,它没有。
如果没有,范围工作的调用堆栈或类似每一个血腥的事情,我已经了解编程告诉我它应该?
如果你想在函数外使用一个变量,那么在使用它之前,你需要编写global $outsidevar
关于你的第一组问题:
foo($a);
function foo($b) { echo $b; }
在这种情况下, $a
不会被复制到新变量$b
,只是因为它是按值传递的。
这是因为PHP使用了copy-on-write概念。 PHP不会复制变量的内容,除非它们被更改。 相反,PHP将增加$a
的现有“zval”的refcount
属性。
那么,整个事情并不是那么简单,而是要回答你的问题:不,它不会复制变量,除非在函数中写入变量,否则不会使用引用保存CPU和内存。 在大多数情况下,引用不会改变性能,但在最坏的情况下,它实际上会降级它(因为如果变量的非is_ref
变量已经存在并且创建了引用,则必须复制该变量的值以获取带有is_ref
的zval和没有的zval)。 使用引用优化代码并不好。
如果函数的参数被定义为如此“function my_function($ variable){}”,那么您将得到该变量的一个副本,并且函数内部对该变量所做的任何更改都不会被函数调用方使用。 你可以通过在定义你的函数时在参数前加一个&符号来引用一个变量,因此对变量的任何修改都会持续到函数调用者,即“function my_function(&$ variable){}”
function myfunction($var) {
$var = 'World';
}
$var = 'Hello';
myfunction($var);
echo $var; // 'Hello';
通过引用传递变量
function myfunction(&$var) {
$var = 'World';
}
$var = 'Hello';
myfunction($var);
echo $var; // 'World'
链接地址: http://www.djcxy.com/p/50095.html