我就想知道,在什么情况下,后面这段代码是true?【if ($a === $b) echo '==='; 】
我就想知道,在什么情况下,后面这段代码是true?【if ($a === $b) echo '==='; 】
想不到什么情况他们是全等的。
我就想知道,在什么情况下,后面这段代码是true?【if ($a === $b) echo '==='; 】
想不到什么情况他们是全等的。
2017-08-12
$a = new Car();
$b = new Car();
$a = $b = new Car();
a.x = a = {n:2},我们可能会这么想:
1.先把 {n:2} 赋值给 a 2.然后再创建 a.x,将 {n:2} 再赋值给 a.x12
这样似乎确实说不通 a.x
的值是 undefined
,因为 a.x
确实是被赋值了的啊。
可事实上,a.x
的值就是 undefined
。
再来看一下: a = a.x = {n:2}
,按照上面的思路来看的话,应该是:
1.先把 {n:2} 赋值给 a.x,那么也就相当于 b.x = {n:2} 2.再把 a 重新指向 {n:2}。那么这时候 a.x 的值确实是 undefined,a 对象 {n:2} 中就没有 x 属性嘛。12
按照这种思路,上述两种方式的结果应该是不同的,但事实却是a = a.x = {n:2}
和a.x = a = {n:2}
的结果是一致的,所以我们想的那种赋值的思路是不对的。
事实上,解析器在接受到 a = a.x = {n:2} 这样的语句后,会这样做:
找到 a 和 a.x 的指针。如果已有指针,那么不改变它。如果没有指针,即那个变量还没被申明,那么就创建它,指向 null。
a 是有指针的,指向 {n:1};a.x 是没有指针的,所以创建它,指向 null。
然后把上面找到的指针,都指向最右侧赋的那个值,即 {n:2}。
希望有所帮助
举个例子吧
人是一个类,这能理解吧。
但是同卵双胞胎能说他们的基因(类中的属性和方法)相同,但是并不能说他们完全相同对吧,起码根据出生时间一个大一个小。
换成代码
$a=new Car(),$b=new Car,分别用var_dump输出,可以直观的看出区别,这里就不发截图了,而且动一下收印象更深嘛。
而我是一个精神分裂患者,我自己有n个我,这n个我不光基因相同,除了代号(实例名),什么都相同,因为我是同一个人。别钻牛角尖说什么眼神不同啊。
换成代码
本体$a=new Car(),另一重人格$b,但还是我,所以$b=$a,再有一重人格也同理,$c=$a,这时候这个if就成立了
这个在项目中怎么应用呢?我也没用过........就只是在前边那个通过私有初始化函数来控制实例的创建的那一课用来检查第二次创建的实例和第一次的是不是同一个实例(结果是true).....
举报