很多数据类型都可以写时复制(copy-on-write),比如$a=$b,两个变量赋值是相等的。对象不同:$box1=newParcel();$box1->destinationCountry='Denmark';$box2=$box1;$box2->destinationCountry='Brazil';echo'Parcelsneedtoshipto:'。$box1->目的地国家。'和'。$box2->destinationCountry;//打印结果//包裹需要寄往:巴西和巴西目前的情况是$box1赋给$box2时,$box2没有复制box1的值。相反,PHP使用另一种方式将$box2指向同一个对象,称其为引用。通过使用==运算符比较两个对象,您可以知道它们是否具有相同的类和属性。if($box1==$box2)echo'等效';可以进一步区分它们是否引用同一个原始对象,并使用相同的方法===运算符进行比较:if($box1===$box2)echo'exactsameobject!';当两个变量指向相同的值时,===比较运算符将返回true。如果对象相同但存储在不同位置,则返回false。对象总是通过引用传递。也就是说,当一个对象被传递给一个函数时,该函数将作用于同一个对象,如果该对象在函数内部发生变化,该变化将反映到函数外部。这是将对象分配给新变量的行为的扩展。对象总是以提供对原始对象的引用的方式运行,而不是创建自身的副本。$courier=newPigeonPost('AvianDeliveryLtd');$other_courier=$courier;$other_courier->name='PigeonPost';echo$courier->name;//输出"PigeonPost"对象将提供指向自身引用的指针,而不是复制自身。这意味着如果函数对传入的对象进行操作,则无需从函数返回。此更改反映在对象的原始副本上。如果需要为现有对象制作单独的副本,可以使用clone关键字来创建它。$courier=newPigeonPost('AvianDeliveryLtd');$other_courier=clone$courier;$other_courier->name='PigeonPost';echo$courier->name;//克隆对象时输出“AvianDeliveryLtd”,存储在其属性中的任何对象都将是引用而不是副本。PHP有一个神奇的方法,就是如果声明了一个对象,当这个对象被复制时,这个对象就会被调用,这就是_clone()方法,你可以声明并使用这个来确定这个对象会做什么被复制,甚至不接受复制。Fluent接口对象始终通过引用传递,这意味着无需从方法返回对象来观察其变化。但是,如果您从方法中返回$this,则可以在您的应用程序中创建一个流畅的接口,让您可以将方法链接在一起。它是这样工作的:1.创建对象2.调用对象的方法3.获取方法返回的正确对象4.选择返回步骤2classParcel{protected$weight;受保护的$destinationCountry;publicfunctionsetWeight($weight){echo"权重设置为:".$重量。"\n";$this->weight=$weight;返回$这个;}publicfunctionsetCountry($country){echo"目的地国家是:".$国家。"\n";$this->destinationCountry=$country;返回$这个;}}$myParcel=新包裹;$myParcel->setWeight(5)->setCountry('秘鲁');这里的关键是可以在一行代码中调用多个方法(可以加一些换行符增加代码的可读性),并且可以任意顺序调用。由于每个方法都返回生成的对象,因此可以通过返回对象来调用下一个方法。
