PHP黑暗艺术: 引用(References)
还记得你第一次玩C语言吗?函数,结构体!还记得第一次使用指针吗? ’*', ‘&’, ‘->’ 都很让你受伤,但是最终你还是搞定了它。值得庆幸(取决于你怎么看)的是现在我们进行web编程的时候,我们不必涉足指针和引用。但是,PHP也允许我们通过引用传值。这不是很常用,但是,如果能够正确的使用对你的代码的质量有很大的好处。
首先你要明白的是,PHP中的引用不是C语言中的引用。你不能做指针运算( pointer arithmetic)因为他们不是真实的地址。在PHP中引用实际上是标识符的别名。这意味着,你可以有2个变量名共享相同的变量内容。
你可以用PHP引用做以下3件事情:
·通过引用赋值(Assign by reference.)
·通过引用传值(Pass by reference.)
·返回引用(Return by reference.)
上面的代码将$y的引用赋值给$x。因此,当$x被赋值3的时候,通过$y也可以得到相同的内容3。
对应的英文原文:The above code sets $x and $y’s references to the same content area. Therefore, when $x is assigned 3, $y has access to the same data.
这段代码允许你修改一个变量的值而不需要返回任何东西。这个例子是一个简单的计数器,但是你可以给$item设置任意的值,它都会正常工作。
英文原文:This code allows you to modify a variable’s value without ever returning anything. In this example I made a simple counter, but you can set the value of $item to anything and it should work out just fine.
这段代码返回了Test类的公有变量$count的一个引用。通常这不是最佳实践,因为它降低了代码的可读性。
英文原文:This code returns a reference to the public $count variable of the Test class.
这里$x是$y的引用。.使用unset方法来注销引用。
什么是 PHP 引用(references)?
首先你要明白的是,PHP中的引用不是C语言中的引用。你不能做指针运算( pointer arithmetic)因为他们不是真实的地址。在PHP中引用实际上是标识符的别名。这意味着,你可以有2个变量名共享相同的变量内容。
可以用引用做什么?
你可以用PHP引用做以下3件事情:
·通过引用赋值(Assign by reference.)
·通过引用传值(Pass by reference.)
·返回引用(Return by reference.)
$x =& $y; $x = 3; echo "X: $x, Y: $y";
上面的代码将$y的引用赋值给$x。因此,当$x被赋值3的时候,通过$y也可以得到相同的内容3。
对应的英文原文:The above code sets $x and $y’s references to the same content area. Therefore, when $x is assigned 3, $y has access to the same data.
function add_item(&$item) { $item++; } $totalItems = 0; for($i = 0; $i <; 5; $i++) { add_item($totalItems); } echo "Total items: $totalItems";
这段代码允许你修改一个变量的值而不需要返回任何东西。这个例子是一个简单的计数器,但是你可以给$item设置任意的值,它都会正常工作。
英文原文:This code allows you to modify a variable’s value without ever returning anything. In this example I made a simple counter, but you can set the value of $item to anything and it should work out just fine.
class Test { public $count = 0; public function &getCount() { return $this->count; } } $t = new Test(); $value = &$t->getCount(); $t->count = 25; echo $value;
这段代码返回了Test类的公有变量$count的一个引用。通常这不是最佳实践,因为它降低了代码的可读性。
英文原文:This code returns a reference to the public $count variable of the Test class.
注销引用(Unsetting References)
这里$x是$y的引用。.使用unset方法来注销引用。
$x =& $y; unset($x);