tamiyalagu
คนรักเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 191
|
 |
« เมื่อ: 29 ธันวาคม 2009, 18:19:07 » |
|
$a = "A"; $b = 0; if($a == $b){ echo "$a กับ $b มีค่าเท่ากัน"; }else{ echo "$a กับ $b มีค่าไม่เท่ากัน"; }
ไม่ทราบเป็นที่เครื่องผมคนเดียวหรือเปล่า ใครว่างลองเอาสคิปนี้ไปรันดู ทำไมของผมมันออกมาว่า A กับ 0 มีค่าเท่ากัน
|
|
|
บันทึกการเข้า
|
|
|
|
Reality
สมุนแก๊งเสียว
พลังน้ำใจ: 51
ออฟไลน์
กระทู้: 757
|
 |
« ตอบ #1 เมื่อ: 29 ธันวาคม 2009, 18:37:59 » |
|
มันอาจจะไม่ได้หมายความว่ามีค่าเท่ากันครับ ไม่เชื่อลองใช้ === (= สามตัว จะเช็คด้วยว่าชนิดตัวแปรตรงกันไหม) ใช้ == สองตัว อาจจะหมายถึงการเช็คทางบูลีน (true, false) ซึ่ง a b c d หรือ ข้อความใดๆ มันก็เป็น false หมดอ่ะครับ (1 - true, 0 - false) ผิดพลาดอย่างไรขออภัย 
|
|
« แก้ไขครั้งสุดท้าย: 29 ธันวาคม 2009, 18:39:35 โดย Luscentz »
|
บันทึกการเข้า
|
|
|
|
iampick
คนรักเสียว
พลังน้ำใจ: 20
ออฟไลน์
กระทู้: 119
|
 |
« ตอบ #2 เมื่อ: 29 ธันวาคม 2009, 18:39:21 » |
|
ขอคุณสำหรับความรู้คับผม
|
|
|
บันทึกการเข้า
|
Next Target : ........
|
|
|
tamiyalagu
คนรักเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 191
|
 |
« ตอบ #3 เมื่อ: 29 ธันวาคม 2009, 18:47:47 » |
|
ตัวแปรมันคนละชนิดกันมันยิ่งต้องไม่เท่ากันไม่ใช่เหรอ ผมแปลกใจว่าทำไมมันถึงออกมาเท่ากัน
แล้วเราจะทำยังไงให้มันวัดค่าได้ โดยเราไม่รู้ว่า $a และ $b เป็น string หรือ int
|
|
|
บันทึกการเข้า
|
|
|
|
Reality
สมุนแก๊งเสียว
พลังน้ำใจ: 51
ออฟไลน์
กระทู้: 757
|
 |
« ตอบ #4 เมื่อ: 29 ธันวาคม 2009, 19:08:00 » |
|
ตัวแปรมันคนละชนิดกันมันยิ่งต้องไม่เท่ากันไม่ใช่เหรอ ผมแปลกใจว่าทำไมมันถึงออกมาเท่ากัน
แล้วเราจะทำยังไงให้มันวัดค่าได้ โดยเราไม่รู้ว่า $a และ $b เป็น string หรือ int
มันอาจจะ ปัดตัวแปรมาเช็คครับ (ผมเดานะครับ) เช่น ตัวแปรคนละชนิด แต่ค่ามันอาจจะเท่ากันได้ไงครับเช่นเลข 1,0 true, false แล้วเราจะวัดค่าได้ยังไง โดยที่เราไม่รู้ว่าเป็น string หรือ int ยังไงเราก็ต้องรู้ 1 ตัวละครับ ว่าเราจะเช็คอะไร ? เราก็ปัดตัวแปรทั้งสองก่อนเช็คให้เป็นชนิดนั้นๆ ไงครับ อาจจะใช้ (string) หรือ (int) นำหน้าเพื่อปัดเป็นชนิดนั้นๆ แล้วค่อยควบคุมก็ได้เช่นกัน
|
|
|
บันทึกการเข้า
|
|
|
|
kurng
Verified Seller
สมุนแก๊งเสียว
พลังน้ำใจ: 96
ออฟไลน์
กระทู้: 950
|
 |
« ตอบ #5 เมื่อ: 29 ธันวาคม 2009, 19:12:15 » |
|
มันอาจจะไม่ได้หมายความว่ามีค่าเท่ากันครับ ไม่เชื่อลองใช้ === (= สามตัว จะเช็คด้วยว่าชนิดตัวแปรตรงกันไหม) ใช้ == สองตัว อาจจะหมายถึงการเช็คทางบูลีน (true, false) ซึ่ง a b c d หรือ ข้อความใดๆ มันก็เป็น false หมดอ่ะครับ (1 - true, 0 - false) ผิดพลาดอย่างไรขออภัย  คล้าย ๆ ข้อความข้างบนครับ ผมเปิดหนังสือตอบ นะ ได้ความว่า ตัวแปร ทั้งสองตัว มันเป็นตัวแปรคนละชนิดกัน เมื่อนำมาเปรียบเทียบด้วย == จึงมีค่า เป็น true เนื่องจากไม่มีการเปรียบเทียบค่า ในที่นี้ ไม่ได้แปรว่า A=0 ตามที่ตั้งค่าให้มันแสดง แต่แปรว่า ค่าที่ได้ เป็น true จึง แสดง เปิดหนังสือตอบ ขอบคุณครับที่ให้ได้ทบทวน
|
|
|
บันทึกการเข้า
|
IN Times : หลังจากโดนคนรักทิ้ง จึงเข้าป่า เจอฤษี สอนวิชาเปิดฟ้า วันนี้เขากลับมาอย่างผู้ชนะ กับรายได้ ไม่ต่ำกว่า 20,000 บาท ต่อเดือน ซึ่งก็ไม่รู้ว่าจะยังดีอย่างนี้ไปอีกนานแค่ไหน แต่ตอนนี้ขอดื่มด่ำกับความสำเร็จในตอนนี้ก่อน เรื่องราวต่อไปจะเป็นเช่นไร ไม่มีใครรู้ เพราะไม่มีให้ติดตาม ในฟรีทีวีทั่วไป หากอยากรู้ท่านต้องซื้อ กล่อง Google TV เท่านั้นถึงจะรับสัญญาณนี้ได้ ฮา ๆ ฺB4A coupon code ลด 50%: cgulwd  --- หารายได้จาก app ที่ Startapp คลิ๊กเลย 
|
|
|
tamiyalagu
คนรักเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 191
|
 |
« ตอบ #6 เมื่อ: 29 ธันวาคม 2009, 19:25:42 » |
|
ปกติ php มันเทียบค่าต่างชนิดได้ไม่ใช่เหรอครับ คือถ้ามันจะไม่ได้ทั้งหมดก็ไม่ว่าอะไรแต่ แล้วทำไม A กับ 1 มีค่าไม่เท่ากัน $a = "A"; $b = 1; if($a == $b){ echo "$a กับ $b มีค่าเท่ากัน"; }else{ echo "$a กับ $b มีค่าไม่เท่ากัน"; }
คือถ้าใช้ เงื่อนไขว่า "ค่าคนละชนิดจะไม่เทียบค่า และจะออกมาเป็น true" แล้วทำไมทีงี้มันออกมา มีค่าไม่เท่ากันอ่ะครับ
|
|
|
บันทึกการเข้า
|
|
|
|
Reality
สมุนแก๊งเสียว
พลังน้ำใจ: 51
ออฟไลน์
กระทู้: 757
|
 |
« ตอบ #7 เมื่อ: 29 ธันวาคม 2009, 19:39:26 » |
|
คือ มันก็เหมือนกันแหละครับ
เดาอีกเหมือนเดิม ถ้าให้ 1 - true, 0 - false
ผมเคยบอกไปว่า ถ้าเป็นสตริง แล้วเราเช็คแบบข้ามชนิดยังงี้ php มัน(น่าจะ) เช็คโดยคิดว่าตัวแปรทั้งสองของเราเป็นบูลีน มันก็เลยสรุปมาว่า สตริง -> เป็น false ไปซะ อะไรประมาณนี้
หรือจะคิดว่า string มันแปลงมาเป็นเลขแล้วได้ 0 ก็ได้
มันอยู่ที่ใจเราอ่ะครับ เราอยากจะเข้าใจแบบไหน
|
|
|
บันทึกการเข้า
|
|
|
|
kurng
Verified Seller
สมุนแก๊งเสียว
พลังน้ำใจ: 96
ออฟไลน์
กระทู้: 950
|
 |
« ตอบ #8 เมื่อ: 29 ธันวาคม 2009, 19:42:01 » |
|
หากจำไม่ผิด 0 กับ 1 เอง มันมีค่า ทางตรรกะ หมายถึงตัวมันเอง มีค่า เวลาเปลี่ยเทียบ หมายถึง ใช่ กับ ไม่ใช่อยู่แล้ว
ลองเปลี่ยน ค่า $b เป็น 2 ดูซิครับ ว่ามันให้ค่าอะไร หากมันออกมาเท่ากัน
อาจแปลว่า
"A"= 0 ในคำถามแรก หมายถึง จริงกับจริง มันเลยให้ค่าออกมาเป็นจริง "A"=1 ในคำถามที่ 2 หมายถึง จริง กับ เท็จ มันเลยออกมา เป็นเท็จ
อาจหมายถึงอย่างนี้ก็ได้ ในเมื่อมันอ่านค่าตัวเลข กับตัวอักษรไม่ได้เลยอ่านค่า เป็นการเปรียบเทียบ
มั่ง
|
|
|
บันทึกการเข้า
|
IN Times : หลังจากโดนคนรักทิ้ง จึงเข้าป่า เจอฤษี สอนวิชาเปิดฟ้า วันนี้เขากลับมาอย่างผู้ชนะ กับรายได้ ไม่ต่ำกว่า 20,000 บาท ต่อเดือน ซึ่งก็ไม่รู้ว่าจะยังดีอย่างนี้ไปอีกนานแค่ไหน แต่ตอนนี้ขอดื่มด่ำกับความสำเร็จในตอนนี้ก่อน เรื่องราวต่อไปจะเป็นเช่นไร ไม่มีใครรู้ เพราะไม่มีให้ติดตาม ในฟรีทีวีทั่วไป หากอยากรู้ท่านต้องซื้อ กล่อง Google TV เท่านั้นถึงจะรับสัญญาณนี้ได้ ฮา ๆ ฺB4A coupon code ลด 50%: cgulwd  --- หารายได้จาก app ที่ Startapp คลิ๊กเลย 
|
|
|
tamiyalagu
คนรักเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 191
|
 |
« ตอบ #9 เมื่อ: 29 ธันวาคม 2009, 20:03:05 » |
|
อย่างที่บอกไปว่า ถ้ามันเป็นการเทียบค่า และใช้ตรรกะเดียวกันทั้งหมดก็ไม่แปลก แต่ดูแล้วมันน่าไม่ใช่อ่ะครับ
ถ้าให้ค่า $b = 2 ก็ต้องออกมาไม่เท่ากันจิ คือจะให้ค่าอะไรก็ตามถ้าเป็นค่าที่ไม่เท่ากัน มันก็จะไม่ผ่าน if ยกเว้นว่าเป็น 0 และคำถามของกระทู้ก็คือทำไมเมื่อเป็น 0 ถึงผ่าน if
ถ้ามองในแง่ของการที่มันไม่ได้เทียบค่าของ 2 ตัว แต่เทียบว่า "2 ตัวเป็น true หรือเป็น false เหมือนกันหรือเปล่า" มันก็ยังไม่ใช่อยู่ดี เพราะ
โดยปกติ 0 จะเท่ากับ false เช่น
$x =0; if($x){echo "x มีค่า";} else {echo "x ไม่มีค่า";}
ถ้าวัดแบบนี้ ผลจะออกมาเป็น x ไม่มีค่า (เป็น false ไม่สามารถผ่าน if ได้)
$x ="A"; if($x){echo "x มีค่า";} else {echo "x ไม่มีค่า";}
ถ้าแบบนี้ มันจะมีค่า (เป็น true จึงสามารถผ่าน if ได้)
ในเมื่อ x ตัวแรกเป็น false และ x ตัวที่ 2 เป็น true เวลามาเทียบกัน มันก็ต้องไม่ผ่าน if สิ แล้วทำไมมันถึงผ่าน
หรือถ้ามองว่า ตัว php มองว่า 0 มีค่าเป็น true ดังนั้น 1 ก็ควรมีค่าเป็น false และเมื่อ $a ="A"; มีค่าเป็น true $a ="1"; ก็ควรมีค่าเป็น true ด้วย
แล้วทำไม $a = "1" กับ $b = 1 ถึงผ่าน if ได้ ในเมื่อ ตัวนึงเป็น true อีกตัวเป็น false
|
|
|
บันทึกการเข้า
|
|
|
|
Reality
สมุนแก๊งเสียว
พลังน้ำใจ: 51
ออฟไลน์
กระทู้: 757
|
 |
« ตอบ #10 เมื่อ: 29 ธันวาคม 2009, 20:21:02 » |
|
ถ้างั้นผมก็คงอธิบายไม่ได้แล้วอะนะ (คงต้องไปถามผู้พัฒนา php ในตอนนี้เอง  ) "1" กับ 1 เช็คกันได้อาจจะเป็นเพราะว่า php มันฉลาดก็ได้ รู้ว่าตัวแปรสองตัวเป็นเลขเหมือนกัน เพราะผมลอง "3" กับ 3 - ผ่าน "4" กับ 3 - ไม่ผ่าน "34" กับ 3 - ผ่าน "43" กับ 3 - ไม่ผ่าน หรือมันอาจจะเช็คค่าที่ char ตัวแรก (รึเปล่า ?) ก็นั่นแหละ สุดท้ายเราก็ไม่รู้ว่าสุดท้ายแล้วมันใช้ตัวแปรชนิดไหนในการเทียบค่า มันอาจจะใช้ทั้งหมด แต่อาจจะไล่กันมาเรื่อยๆ ก็ได้ เพราะว่า php, perl มีข้อพิเศษตรงที่ตัวแปรมันยืดหยุ่นแบบเว่อร์ๆ นี้แหละ
|
|
|
บันทึกการเข้า
|
|
|
|
tamiyalagu
คนรักเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 191
|
 |
« ตอบ #11 เมื่อ: 29 ธันวาคม 2009, 20:30:55 » |
|
เอ.. ทำไมของผม "34" กับ 3 มันไม่ผ่านอะไครับ หรือเป็นที่เครื่องผมคนเดียวหว่า โดนไวรัสเปล่าเนี่ย  ช่วยทดลองดูอีกทีได้หรือเปล่าครับ อยากรุ้ว่าเป็นที่เครื่องหรือเป็นที่อะไร ทำไมมันไม่เหมือนกัน  $a = "34"; $b = 3; if($a == $b){ echo "$a กับ $b มีค่าเท่ากัน"; }else{ echo "$a กับ $b มีค่าไม่เท่ากัน"; }
|
|
|
บันทึกการเข้า
|
|
|
|
Reality
สมุนแก๊งเสียว
พลังน้ำใจ: 51
ออฟไลน์
กระทู้: 757
|
 |
« ตอบ #12 เมื่อ: 29 ธันวาคม 2009, 20:34:44 » |
|
เวน สงสัยผมเมา  ลองดูอีกรอบไม่ผ่านแหะ ผมคงเมาเองแหละ ผมใช้ echo '$a eq $b '; กับ echo '$a ne $b'; มึนเอง -.-' (อายจัง)  (หนีดีกว่า!) อย่าตามมาน้าาาา 
|
|
|
บันทึกการเข้า
|
|
|
|
fatman
Newbie
พลังน้ำใจ: 2
ออฟไลน์
กระทู้: 43
|
 |
« ตอบ #13 เมื่อ: 29 ธันวาคม 2009, 21:12:12 » |
|
อ่านจากคู่มือมาครับ http://php.net/manual/en/language.operators.comparison.php  If you compare an integer with a string, the string is converted to a number. If you compare two numerical strings, they are compared as integers. These rules also apply to the switch statement. - ถ้าเปรียบเทียบค่า ตัวเลขกับตัวหนังสือ ค่าที่เป็นตัวหนังสือจะถูกแปลงเป็นตัวเลขก่อนครับ ซึ่งวิธีแปลงจากตัวหนังสือเป็นตัวเลข อ้างจาก http://www.php.net/manual/en/l...nguage.types.string.conversion  If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). -ถ้าตัวหนังสือขึ้นต้นด้วยตัวเลข ค่านี้จะถูกนำมาแปลงเป้นตัวเลข แต่ถ้าเป็นตัวหนังสือที่ไม่ใช่ตัวเลขจะแปลงเป็น 0 ทั้งหมด นั่นก็คือ $a จะถูกแปลง เป็น 0 ทำให้ 0 == 0 เป็นจริงครับ 
|
|
|
บันทึกการเข้า
|
|
|
|
tamiyalagu
คนรักเสียว
พลังน้ำใจ: 3
ออฟไลน์
กระทู้: 191
|
 |
« ตอบ #14 เมื่อ: 29 ธันวาคม 2009, 21:35:49 » |
|
อ่าา ที่แท้มันเป็นเช่นนี้เอง ปริศนาไขกระจ่างแล้ว ขอบคุณมากครับ 
|
|
|
บันทึกการเข้า
|
|
|
|
KMCORP
ก๊วนเสียว
พลังน้ำใจ: 52
ออฟไลน์
กระทู้: 315
|
 |
« ตอบ #15 เมื่อ: 29 ธันวาคม 2009, 22:19:20 » |
|
อ่านจากคู่มือมาครับ http://php.net/manual/en/language.operators.comparison.php  If you compare an integer with a string, the string is converted to a number. If you compare two numerical strings, they are compared as integers. These rules also apply to the switch statement. - ถ้าเปรียบเทียบค่า ตัวเลขกับตัวหนังสือ ค่าที่เป็นตัวหนังสือจะถูกแปลงเป็นตัวเลขก่อนครับ ซึ่งวิธีแปลงจากตัวหนังสือเป็นตัวเลข อ้างจาก http://www.php.net/manual/en/l...nguage.types.string.conversion  If the string starts with valid numeric data, this will be the value used. Otherwise, the value will be 0 (zero). -ถ้าตัวหนังสือขึ้นต้นด้วยตัวเลข ค่านี้จะถูกนำมาแปลงเป้นตัวเลข แต่ถ้าเป็นตัวหนังสือที่ไม่ใช่ตัวเลขจะแปลงเป็น 0 ทั้งหมด นั่นก็คือ $a จะถูกแปลง เป็น 0 ทำให้ 0 == 0 เป็นจริงครับ  +1 ขอบคุณครับ ผมเองก็สงสัยเหมือนกัน
|
|
|
บันทึกการเข้า
|
โปรโมทเว็บให้ POP กับ WP Digg Dofollow 100% เพิ่ม Traffic X2 ด้วยTwitter Connect รับทั้ง ไทย+Eng useful blog 
|
|
|
Reality
สมุนแก๊งเสียว
พลังน้ำใจ: 51
ออฟไลน์
กระทู้: 757
|
 |
« ตอบ #16 เมื่อ: 30 ธันวาคม 2009, 03:35:38 » |
|
+1 เช่นกัน ผมก็โชว์เห่ยอยู่นานเลย 
|
|
|
บันทึกการเข้า
|
|
|
|
|
Rapid-Developer
Newbie
พลังน้ำใจ: 4
ออฟไลน์
กระทู้: 50
|
 |
« ตอบ #18 เมื่อ: 30 ธันวาคม 2009, 09:03:20 » |
|
ถ้าจะเปรียบเทียบว่า อะไรมันคือสิ่งๆนั้นจริงๆหรือเปล่า เช่นมันใช่ true false จริงหรือเปล่า จะใช้แบบนี้ครับ $a = "A"; $b = 0;
if( $a === $b ) { echo "true"; } else { echo "false"; }
หรือจะใช้ในการเช็ค type ของแต่ละชนิดได้ด้วยว่ามันใช่ type นั้นจริงๆหรือเปล่า เช่น ตังแปรนั้นเป็น array เหมือนกันหรือเปล่า
|
|
|
บันทึกการเข้า
|
--
|
|
|
powerbeer001
Verified Seller
สมุนแก๊งเสียว
พลังน้ำใจ: 28
ออฟไลน์
กระทู้: 888
|
 |
« ตอบ #19 เมื่อ: 30 ธันวาคม 2009, 09:17:10 » |
|
ผมคิดว่ามันเป็นเพราะว่า มันแปลง A เป็น 0 เพราะต้องไปเทียบ type กับ $b ซึ่งเป็น Integer if(String==Integer) ดังนั้นมันก็เปรียบได้กับ if(Integer==Integer) ซึ่งในที่นี้ $a="A" ดังนั้นเมื่อ $a โดนแปลงเป็น Integer ก็มีค่าเท่ากับ 0 นั่นเอง ทำให้มันตรงกัน ลองแก้ code เป็น $a = "A"; $b = "0"; // ใส่ " เพื่อให้เป็น String if( $a == $b ) { echo "true"; } else { echo "false"; } รับรองไม่เท่ากันแน่นอนครับครับ 
|
|
|
บันทึกการเข้า
|
|
|
|
|