Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 指定对象和指定对象引用之间有什么区别?_Php_Oop_Object_Reference - Fatal编程技术网

Php 指定对象和指定对象引用之间有什么区别?

Php 指定对象和指定对象引用之间有什么区别?,php,oop,object,reference,Php,Oop,Object,Reference,我阅读PHP中的对象引用。我用对象引用做了一些实验 我的疑问是: 我将一个对象分配给另一个变量。然后,我更改变量的值并打印变量。这两个变量都会受到影响。我将一个对象引用分配给另一个变量。然后,我更改了其中一个变量的值,这两个变量都会受到影响 <?php ##Class class A { var $foo = 1; } #Assignment $a = new A(); $b = $a; echo "Assignment:\n"; $b->foo =

我阅读PHP中的对象引用。我用对象引用做了一些实验

我的疑问是:

我将一个对象分配给另一个变量。然后,我更改变量的值并打印变量。这两个变量都会受到影响。我将一个对象引用分配给另一个变量。然后,我更改了其中一个变量的值,这两个变量都会受到影响

 <?php

 ##Class 
 class A
 {
  var $foo = 1;
 }

 #Assignment
 $a = new A();
 $b = $a;

 echo "Assignment:\n";
 $b->foo = 8; 
 echo $a->foo."\n";
 echo $b->foo."\n";

 #Reference
 $c = new A();
 $d =& $c;

 echo "References:\n";
 $d->foo = 4;
 echo $c->foo."\n";
 echo $d->foo."\n";

 ?>
我的问题是:

指定对象和指定对象引用之间的区别是什么


两者是相同的还是有什么不同?

这已经详细解释过了,但我会再次解释:

当PHP创建一个对象时,它为变量分配一个对象标识符,允许访问该对象。当您将对象作为参数传递,或将其分配给变量时,实际上是为变量提供了该标识符的副本


对于几乎所有的测试用例和情况,它们都是相同的。

对此进行了详细解释,但我将再次解释:

当PHP创建一个对象时,它为变量分配一个对象标识符,允许访问该对象。当您将对象作为参数传递,或将其分配给变量时,实际上是为变量提供了该标识符的副本

对于几乎所有的测试用例和情况,它们都是相同的

指定对象和指定对象引用之间有什么区别

PHP没有对象引用,因此无法与不存在的对象进行比较

但是,我假设您想知道以下两者之间的区别:

$a = new Foo;
$b = $a;

第一个是对象标识符的赋值,第二个是将$b作为$a的别名。如果我们稍微改变一下流量,差异就会变得明显:

$a = NULL;
$b = $a;
$a = new Foo;

在第一个示例赋值中,$b为NULL。在第二个示例中,$b是变量别名a.k.a.PHP变量引用

执行后,ìn第一个示例$b自然为空,而在第二个示例中,它是$a

如您所见,独立于对象,执行赋值与创建变量引用不同

我希望这能为你澄清一点。不要谈论引用,只讨论变量别名。这与PHP世界中的情况更匹配

指定对象和指定对象引用之间有什么区别

PHP没有对象引用,因此无法与不存在的对象进行比较

但是,我假设您想知道以下两者之间的区别:

$a = new Foo;
$b = $a;

第一个是对象标识符的赋值,第二个是将$b作为$a的别名。如果我们稍微改变一下流量,差异就会变得明显:

$a = NULL;
$b = $a;
$a = new Foo;

在第一个示例赋值中,$b为NULL。在第二个示例中,$b是变量别名a.k.a.PHP变量引用

执行后,ìn第一个示例$b自然为空,而在第二个示例中,它是$a

如您所见,独立于对象,执行赋值与创建变量引用不同


我希望这能为你澄清一点。不要谈论引用,只讨论变量别名。在PHP世界中,这与它更为匹配。

你说的“几乎”是什么意思?它们是,还是不是同一种引用?据我所知,这是不一样的。我不确定到底有什么区别,因为我做的每一次测试,它们的功能都是一样的。@Truth-最后,它们是否相同?你说的“几乎”是什么意思?它们是,还是不是同一种引用?据我所知,这是不一样的。我不确定到底有什么区别,因为我做的每一次测试,它们的功能都是一样的。@Truth-最后,它们是否都一样?