亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

我就想知道,在什么情況下,后面這段代碼是true?【if ($a === $b) echo '==='; 】

我就想知道,在什么情況下,后面這段代碼是true?【if ($a === $b) echo '==='; 】


想不到什么情況他們是全等的。

正在回答

8 回答

上面的如果沒看懂,我就簡單說下我的理解

$a = new Car();

$b = new Car();

這兩段值一樣但是內存地址不一樣,所以判斷不是全等

$a = $b = new Car(); 這一句 看起來跟上一句沒差別,但是程序執行的時候是$a是先創建一個指針 指向NULL,然后看$b 有沒有指向 如果有就直接指向$b 的地址。所以他們的值和內存都是一樣的。

0 回復 有任何疑惑可以回復我~

$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} 這樣的語句后,會這樣做:

  1. 找到 a 和 a.x 的指針。如果已有指針,那么不改變它。如果沒有指針,即那個變量還沒被申明,那么就創建它,指向 null。

  2. a 是有指針的,指向 {n:1};a.x 是沒有指針的,所以創建它,指向 null。

  3. 然后把上面找到的指針,都指向最右側賦的那個值,即 {n:2}。

希望有所幫助

0 回復 有任何疑惑可以回復我~
#1

新手村上路

。。。一臉懵圈,不明覺厲啊
2019-01-07 回復 有任何疑惑可以回復我~

$a = new Car();

$b = clone($a);? ?//克隆

$c = &$a;? //引用

使用clone的時候是克隆一個新實例,實例號不一樣(用var_dump可以查看),此時$a==$b;

引用時,$a === $c。

0 回復 有任何疑惑可以回復我~

補充:定義一個變量,系統會給變量$variable分配一個內存空間,假設$a = &$variable; $b = &$variable; 我們就說$a,$b是$variable的兩個引用。而引用不再分配內存空間。

---------------完畢-----------------

當我們用

if?($a?===?$b)?echo?'===';

這條語句的時候就會輸出true

0 回復 有任何疑惑可以回復我~

if ($a->name === $b->name) echo '==='; //true

上面返回就是真,這個教程做的確實不好,很多地方說的很模糊。

1 回復 有任何疑惑可以回復我~

舉個例子吧


人是一個類,這能理解吧。

但是同卵雙胞胎能說他們的基因(類中的屬性和方法)相同,但是并不能說他們完全相同對吧,起碼根據出生時間一個大一個小。

換成代碼

$a=new Car(),$b=new Car,分別用var_dump輸出,可以直觀的看出區別,這里就不發截圖了,而且動一下收印象更深嘛。


而我是一個精神分裂患者,我自己有n個我,這n個我不光基因相同,除了代號(實例名),什么都相同,因為我是同一個人。別鉆牛角尖說什么眼神不同啊。

換成代碼

本體$a=new Car(),另一重人格$b,但還是我,所以$b=$a,再有一重人格也同理,$c=$a,這時候這個if就成立了


這個在項目中怎么應用呢?我也沒用過........就只是在前邊那個通過私有初始化函數來控制實例的創建的那一課用來檢查第二次創建的實例和第一次的是不是同一個實例(結果是true).....

0 回復 有任何疑惑可以回復我~
#1

慕數據4083019

還是我....這里糾正一下,最后那個‘私有初始化函數’不準確,應該說‘私有初始化方法’..........
2017-11-13 回復 有任何疑惑可以回復我~
#2

慕尼黑123390 回復 慕數據4083019

那方法和函數到底是什么區別呢?
2018-10-22 回復 有任何疑惑可以回復我~

全等不只是數值相等,數據類型也相等。比如數值123和字符串“123”

0 回復 有任何疑惑可以回復我~
#1

慕粉1720382552

對于普通類型來說,值相等和類型相等,===就會判斷為true。比如 $a=123;$b=123 $a===$b會是真。 這種情況放到本次作業上就不適用了,但教程中提到‘當需要判斷兩個變量是否為同一個對象的引用時,可以使用全等運算符===進行判斷。’,我聯想到了前面學到的兩種賦值運算符,其中提到“=&:引用賦值,意味著兩個變量都指向同一個數據。它將使兩個變量共享一塊內存,如果這個內存存儲的數據變了,那么兩個變量的值都會發生變化。”,所以,對于不同對象來說,要想實現$a === $b判斷為true,需要引用賦值$b=&$a,用clone方法是不行的。
2017-08-26 回復 有任何疑惑可以回復我~

$b=$a;

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

我就想知道,在什么情況下,后面這段代碼是true?【if ($a === $b) echo '==='; 】

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號