帮助我理解PHP变量引用和范围

Ham*_*ter 7 php variables scope list-comprehension reference

参考文献:

  1. 如果我将一个变量传递给一个函数(例如$ var),那应该是对实际变量的引用的副本(这样设置为null不会影响其他副本)?
  2. 或者它是否接收对实际变量的新副本的引用(例如,将其设置为null仅销毁其副本)?
  3. 如果是后者,这会将对象和数组复制到内存中吗?这似乎是浪费内存和CPU时间的好方法,如果是这样的话.

我认为首先可以通过了解其工作原理来正确理解传递(例如&$ var).

范围:

  1. 与当地范围有什么关系?我是否正确地观察到我可以在一个函数中声明一个数组然后在该函数中调用的其他函数中使用该数组而不将它作为参数传递给它们?
  2. 类似地,在函数内调用的函数中声明数组是否允许它在调用者中可用?
  3. 如果不是,通过调用堆栈或任何类似于我已经了解的关于编程的每一个血腥的东西确定范围是否应该?

PHP非常有趣.:(

pro*_*php 2

如果我将变量传递给函数(例如 $var),那么它是否应该是对实际变量的引用的副本(这样将其设置为 null 不会影响其他副本)?

取决于功能。还有你如何称呼它。看这个例子: http: //www.ideone.com/LueFc

或者它是否接收到对实际变量的新副本的引用(这样将其设置为 null 只会破坏其副本)?

再次取决于功能

如果是后者,这是否会复制内存中的对象和数组?如果是这样的话,这似乎是浪费内存和 CPU 时间的好方法。

当然,使用引用会节省内存。在 php>4 中,除非您另外指定,否则它总是使用对象的引用。

与本地范围有什么关系?我是否正确地观察到,我可以在一个函数中声明一个数组,然后在该函数内调用的其他函数中使用该数组,而不将其作为参数传递给它们?

不,你不能。

同样,在函数内调用的函数中以数组形式声明是否允许它在调用者中可用?

不,事实并非如此。

如果不是,范围界定是否可以通过调用堆栈或我所了解的有关编程的所有该死的东西来工作,都告诉我它应该这样做?

如果你想使用函数外部的变量,在使用它之前,你应该写global $outsidevar