由于现在默认情况下通过引用传递对象,在&$obj
有意义的情况下可能会出现一些特殊情况吗?
答案 0 :(得分:10)
对象使用不同的引用机制。 &$object
更多是参考文献的参考。你无法真正比较它们。
见Objects and references:
PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP 5开始,对象变量不再包含对象本身作为值。它只包含一个对象标识符,允许对象访问者查找实际对象。当一个对象通过参数发送,返回或分配给另一个变量时,不同的变量不是别名:它们包含标识符的副本,该副本指向同一个对象。
&$object
不是$object
。我给你举个例子:
foreach ($objects as $object) {
if ($cond) {
$object = new Object(); // This won't affect $objects
}
}
foreach ($objects as &$object) {
if ($cond) {
$object = new Object(); // This will affect $objects
}
}
如果有意义,或者有必要,我不会回答这个问题。这些是基于意见的问题。你绝对可以在没有对象的&
引用的情况下生存,就像没有对象一样。两种机制的存在是PHP向后兼容的结果。
答案 1 :(得分:0)
有些情况下你会添加&在函数名称前面,返回任何值作为参考。
要调用这些功能,我们需要添加&在对象面前。
如果我们添加&在对象前面,然后它将返回值作为引用,否则它将只返回该变量的副本。
class Fruit() {
protected $intOrderNum = 10;
public function &getOrderNum() {
return $this->intOrderNum;
}
}
class Fruitbox() {
public function TestFruit() {
$objFruit = new Fruit();
echo "Check fruit order num : " . $objFruit->getOrderNum(); // 10
$intOrderNumber = $objFruit->getOrderNum();
$intOrderNumber++;
echo "Check fruit order num : " . $objFruit->getOrderNum(); // 10
$intOrderNumber = &$objFruit->getOrderNum();
$intOrderNumber++;
echo "Check fruit order num : " . $objFruit->getOrderNum(); // 11
}
}