PHP黑暗艺术: 引用(References)

还记得你第一次玩C语言吗?函数,结构体!还记得第一次使用指针吗? ’*', ‘&’, ‘->’ 都很让你受伤,但是最终你还是搞定了它。值得庆幸(取决于你怎么看)的是现在我们进行web编程的时候,我们不必涉足指针和引用。但是,PHP也允许我们通过引用传值。这不是很常用,但是,如果能够正确的使用对你的代码的质量有很大的好处。

什么是 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);

posted on 2012-03-03 22:17  IT技术畅销书  阅读(241)  评论(0编辑  收藏  举报

导航