您是否需要使用&修饰符来传递引用?
从技术上/意义上讲,即使有对象,答案也是 肯定的 。这是因为有两种传递/分配对象的方式:通过引用或通过 标识符 。当函数声明包含时
&,例如:
function func(&$obj) {}无论如何,该参数都将通过引用传递。如果您声明时没有
&
function func($obj) {}除对象和资源外,所有内容都将按值传递,然后将通过 identifier 传递。什么是标识符?好吧,您可以将其视为对参考的参考。请看以下示例:
class A{ public $v = 1;}function change($obj){ $obj->v = 2;}function makezero($obj){ $obj = 0;}$a = new A();change($a);var_dump($a);makezero($a);var_dump($a);那么为什么不
$a将其传递给后突然变成整数
makezero呢?这是因为我们只重写了 标识符 。如果我们通过 引用 传递了:
function makezero(&$obj){ $obj = 0;}makezero($a);var_dump($a);现在
$a是一个整数。因此,通过 标识符 和通过 引用 之间存在区别。



