課程
/后端開發
/PHP
/PHP進階篇
我就想知道,在什么情況下,后面這段代碼是true?【if ($a === $b) echo '==='; 】
想不到什么情況他們是全等的。
2017-08-12
源自:PHP進階篇 2-10
正在回答
上面的如果沒看懂,我就簡單說下我的理解
$a = new Car();
$b = new Car();
這兩段值一樣但是內存地址不一樣,所以判斷不是全等
$a = $b = new Car(); 這一句 看起來跟上一句沒差別,但是程序執行的時候是$a是先創建一個指針 指向NULL,然后看$b 有沒有指向 如果有就直接指向$b 的地址。所以他們的值和內存都是一樣的。
$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.x
undefined
再來看一下: a = a.x = {n:2},按照上面的思路來看的話,應該是:
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.x = a = {n:2}
事實上,解析器在接受到 a = a.x = {n:2} 這樣的語句后,會這樣做:
找到 a 和 a.x 的指針。如果已有指針,那么不改變它。如果沒有指針,即那個變量還沒被申明,那么就創建它,指向 null。a 是有指針的,指向 {n:1};a.x 是沒有指針的,所以創建它,指向 null。然后把上面找到的指針,都指向最右側賦的那個值,即 {n:2}。
找到 a 和 a.x 的指針。如果已有指針,那么不改變它。如果沒有指針,即那個變量還沒被申明,那么就創建它,指向 null。
a 是有指針的,指向 {n:1};a.x 是沒有指針的,所以創建它,指向 null。
然后把上面找到的指針,都指向最右側賦的那個值,即 {n:2}。
希望有所幫助
新手村上路
$b = clone($a);? ?//克隆
$c = &$a;? //引用
使用clone的時候是克隆一個新實例,實例號不一樣(用var_dump可以查看),此時$a==$b;
引用時,$a === $c。
補充:定義一個變量,系統會給變量$variable分配一個內存空間,假設$a = &$variable; $b = &$variable; 我們就說$a,$b是$variable的兩個引用。而引用不再分配內存空間。
---------------完畢-----------------
當我們用
if?($a?===?$b)?echo?'===';
這條語句的時候就會輸出true
if ($a->name === $b->name) echo '==='; //true
上面返回就是真,這個教程做的確實不好,很多地方說的很模糊。
舉個例子吧
人是一個類,這能理解吧。
但是同卵雙胞胎能說他們的基因(類中的屬性和方法)相同,但是并不能說他們完全相同對吧,起碼根據出生時間一個大一個小。
換成代碼
$a=new Car(),$b=new Car,分別用var_dump輸出,可以直觀的看出區別,這里就不發截圖了,而且動一下收印象更深嘛。
而我是一個精神分裂患者,我自己有n個我,這n個我不光基因相同,除了代號(實例名),什么都相同,因為我是同一個人。別鉆牛角尖說什么眼神不同啊。
本體$a=new Car(),另一重人格$b,但還是我,所以$b=$a,再有一重人格也同理,$c=$a,這時候這個if就成立了
這個在項目中怎么應用呢?我也沒用過........就只是在前邊那個通過私有初始化函數來控制實例的創建的那一課用來檢查第二次創建的實例和第一次的是不是同一個實例(結果是true).....
慕數據4083019
慕尼黑123390 回復 慕數據4083019
全等不只是數值相等,數據類型也相等。比如數值123和字符串“123”
慕粉1720382552
$b=$a;
舉報
輕松學習PHP中級課程,進行全面了解,用PHP快速開發網站程序
3 回答問一下下面的代碼是運用在什么情況下?我的理解對不對?
2 回答?我就想知道為什么是$0,我用$1,都不行
3 回答我想知道這個 $args 代碼是從哪里冒出來的 有什么意思嗎?
2 回答我想知道 m s x 是什么作用
1 回答以前學c++就不知道這兩東西有什么用,現在還是不知道
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2018-12-07
上面的如果沒看懂,我就簡單說下我的理解
$a = new Car();
$b = new Car();
這兩段值一樣但是內存地址不一樣,所以判斷不是全等
$a = $b = new Car(); 這一句 看起來跟上一句沒差別,但是程序執行的時候是$a是先創建一個指針 指向NULL,然后看$b 有沒有指向 如果有就直接指向$b 的地址。所以他們的值和內存都是一樣的。
2018-12-07
$a = new Car();
$b = new Car();
$a = $b = new Car();
a.x = a = {n:2},我們可能會這么想:
這樣似乎確實說不通
a.x
的值是undefined
,因為a.x
確實是被賦值了的啊。可事實上,
a.x
的值就是undefined
。再來看一下:
a = a.x = {n:2}
,按照上面的思路來看的話,應該是:按照這種思路,上述兩種方式的結果應該是不同的,但事實卻是
a = a.x = {n:2}
和a.x = a = {n:2}
的結果是一致的,所以我們想的那種賦值的思路是不對的。事實上,解析器在接受到 a = a.x = {n:2} 這樣的語句后,會這樣做:
希望有所幫助
2018-08-27
$a = new Car();
$b = clone($a);? ?//克隆
$c = &$a;? //引用
使用clone的時候是克隆一個新實例,實例號不一樣(用var_dump可以查看),此時$a==$b;
引用時,$a === $c。
2018-08-11
補充:定義一個變量,系統會給變量$variable分配一個內存空間,假設$a = &$variable; $b = &$variable; 我們就說$a,$b是$variable的兩個引用。而引用不再分配內存空間。
---------------完畢-----------------
當我們用
這條語句的時候就會輸出true
2018-05-18
if ($a->name === $b->name) echo '==='; //true
上面返回就是真,這個教程做的確實不好,很多地方說的很模糊。
2017-11-13
舉個例子吧
人是一個類,這能理解吧。
但是同卵雙胞胎能說他們的基因(類中的屬性和方法)相同,但是并不能說他們完全相同對吧,起碼根據出生時間一個大一個小。
換成代碼
$a=new Car(),$b=new Car,分別用var_dump輸出,可以直觀的看出區別,這里就不發截圖了,而且動一下收印象更深嘛。
而我是一個精神分裂患者,我自己有n個我,這n個我不光基因相同,除了代號(實例名),什么都相同,因為我是同一個人。別鉆牛角尖說什么眼神不同啊。
換成代碼
本體$a=new Car(),另一重人格$b,但還是我,所以$b=$a,再有一重人格也同理,$c=$a,這時候這個if就成立了
這個在項目中怎么應用呢?我也沒用過........就只是在前邊那個通過私有初始化函數來控制實例的創建的那一課用來檢查第二次創建的實例和第一次的是不是同一個實例(結果是true).....
2017-08-22
全等不只是數值相等,數據類型也相等。比如數值123和字符串“123”
2017-08-12
$b=$a;