博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP 对象和引用总结
阅读量:7078 次
发布时间:2019-06-28

本文共 2254 字,大约阅读时间需要 7 分钟。

PHP 中使用 简单变量对象 时的区别:

① 很多数据类型都可以写时复制(copy-on-write),例:

输出:test1

$b = $a 是传值的拷贝,对 $b 做任何改动都不影响原值 $a。

 

② 将一个对象赋值给另一个对象时,并没有复制第一个对象的内容,而是通过 引用 将第二个对象指向第一个对象,例:

name = 'John';$person2 = $person1;$person2->name = 'Dee';echo 'person one is ',$person1->name,' and person two is ',$person2->name;

输出:person one is Dee and person two is Dee

 

可以通过 == 操作符来比较两个对象,看两者是否具有相同的类和属性;

还可以通过 === 来判断两者是否引用同一个原始对象:

name = 'John';$person2 = $person1;$person2->name = 'Dee';echo 'person one is ',$person1->name,' and person two is ',$person2->name,'.
';if($person1 == $person2) { echo 'equiv
';}if($person1 === $person2){ echo 'exact same object!';}

输出:

person one is Dee and person two is Dee.

equiv 
exact same object!

 

说明:当两个变量指向相同的值时,=== 比较操作符会返回 true。如果两个对象完全相同,但存储在不同的位置,将返回 false。

 

对象总是通过 引用传递。如果需要为一个已经存在的对象复制一个单独的副本,而不是提供一个指向自己的引用,可以使用 clone 关键字来创建:

name = 'John';$person2 = clone $person1;$person2->name = 'Dee';echo 'person one is ',$person1->name,' and person two is ',$person2->name,'.
';if($person1 == $person2) { echo 'equiv
';}else{ echo 'not equiv
';}if($person1 === $person2){ echo 'exact same object!';}else{ echo 'not the same';}

输出:

person one is John and person two is Dee.

not equiv 
not the same

 

说明:使用 clone 关键字会从同一个类中重新创建一个对象,该对象和原始对象一样具有所有相同的属性,这两个对象之间没有链接,可以放心地进行修改。

 

PHP 中魔术方法 __clone() 可以在复制一个已经声明了的对象时调用该方法。因此可以通过声明该方法来决定复制对象时会做些什么:

'; } }$person1 = new Human();$person1->name = 'John';$person2 = clone $person1;$person2->name = 'Dee';echo 'person one is ',$person1->name,' and person two is ',$person2->name,'.
';if($person1 == $person2) { echo 'equiv
';}else{ echo 'not equiv
';}if($person1 === $person2){ echo 'exact same object!';}else{ echo 'not the same';}

输出:

clone... 

person one is John and person two is Dee.
not equiv 
not the same

 

 

由于对象总是通过引用传递,表明无需从一个方法中返回一个对象来观察它的变化,然而,可以通过从一个方法中返回 $this 在程序内建立一个流畅的接口(fluent interface),通过该接口将方法链在一起:

'; $this->name = $name; return $this; } public function setWeight($weight) { echo 'my weight is '.$weight.' kg
'; $this->weight = $weight; return $this; }}$person = new Human();$person->setName('dee')->setWeight('130');

输出:

my name is dee

my weight is 130 kg 

 

说明:return $this 的意思是得到从方法中返回的修正对象。

 

转载地址:http://ospml.baihongyu.com/

你可能感兴趣的文章
I/O重定向和管道
查看>>
MindFusion.WinForms Pack v2016.R2发布
查看>>
为什么 NSLog 不支持 Swift 对象
查看>>
如何优雅的选择字体(font-family)
查看>>
为 Koa 框架封装 webpack-dev-middleware 中间件
查看>>
深入浅出JavaScript:理解函数
查看>>
将群晖 NAS 安全地暴露到公网中
查看>>
【二次元的CSS】—— 用 DIV + CSS3 画咸蛋超人(详解步骤)
查看>>
Android程序逆向分析
查看>>
在阿里云centOS环境下搭建基于thinkphp的网站
查看>>
RegEx 快速掌握最基本的正则语法
查看>>
过去的2015年
查看>>
Webpack + React 开发之路
查看>>
【译】使用 AngularJS 和 Electron 构建桌面应用
查看>>
【经验总结】记一次艰难的居中--日历榜单
查看>>
所有博客将会誊到http://www.xumenger.com/
查看>>
Jodd 5.0.8 发布,Java 常用工具包
查看>>
某网页数据爬取记录
查看>>
GoLand 2019.1 Beta 发布,重要里程碑
查看>>
浅谈SAP Cloud for Sales 自动化
查看>>