Php 是否需要在物体前使用符号?
由于现在默认情况下对象是通过引用传递的,所以当Php 是否需要在物体前使用符号?,php,oop,object,reference,php-internals,Php,Oop,Object,Reference,Php Internals,由于现在默认情况下对象是通过引用传递的,所以当&$obj有意义时,是否存在一些特殊情况?对象使用不同的引用机制&$object更像是一个引用的引用。你真的无法将两者进行比较。 见: PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP5开始,对象变量不再包含对象本身作为值。它只包含一个允许对象访问器查找实际对象的对象标识符。当一个对象通过参数发送、返回或分配给另一个变量时,不同的变量不是别名:它们持有指向同一对象的标识符副本 &$object不是$object。我给你举个例子: fo
&$obj
有意义时,是否存在一些特殊情况?对象使用不同的引用机制&$object
更像是一个引用的引用。你真的无法将两者进行比较。
见:
PHP引用是一个别名,它允许两个不同的变量写入相同的值。从PHP5开始,对象变量不再包含对象本身作为值。它只包含一个允许对象访问器查找实际对象的对象标识符。当一个对象通过参数发送、返回或分配给另一个变量时,不同的变量不是别名:它们持有指向同一对象的标识符副本
&$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向后兼容的结果。在某些情况下,您可以在函数名前面添加&以返回任何值作为引用
要调用这些函数,我们需要在对象前面添加
如果我们在对象前面添加&,那么它将返回值作为引用,否则它将只返回该变量的一个副本
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
}
}
在古老的php版本上运行-廉价/愚蠢的主机提供的类型,快乐地运行着神奇的引号和注册全局打开。。。应该从动态观察中取消的安装类型。如果我想通过循环来修改数组中的项。对于($objects as$key=>$value){$objects[$key]=new Object();},第二个示例是否比执行
更合适?代码应该指出&是一种不同的引用机制。在PHP4中,对象不是引用,因此必须使用$obj=&new MyClass
创建对象。如果你想修改函数中的一个对象,你必须通过引用来传递它。感谢历史背景。然而,我想,有人会问这个问题,为什么PHP-7仍然有两种不同的引用机制。