หัวข้อ: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 18:19:07 โค๊ด:
ไม่ทราบเป็นที่เครื่องผมคนเดียวหรือเปล่า ใครว่างลองเอาสคิปนี้ไปรันดู ทำไมของผมมันออกมาว่า A กับ 0 มีค่าเท่ากัน หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Reality ที่ 29 ธันวาคม 2009, 18:37:59 มันอาจจะไม่ได้หมายความว่ามีค่าเท่ากันครับ ไม่เชื่อลองใช้ === (= สามตัว จะเช็คด้วยว่าชนิดตัวแปรตรงกันไหม)
ใช้ == สองตัว อาจจะหมายถึงการเช็คทางบูลีน (true, false) ซึ่ง a b c d หรือ ข้อความใดๆ มันก็เป็น false หมดอ่ะครับ (1 - true, 0 - false) ผิดพลาดอย่างไรขออภัย :-[ หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: iampick ที่ 29 ธันวาคม 2009, 18:39:21 ขอคุณสำหรับความรู้คับผม
หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 18:47:47 ตัวแปรมันคนละชนิดกันมันยิ่งต้องไม่เท่ากันไม่ใช่เหรอ ผมแปลกใจว่าทำไมมันถึงออกมาเท่ากัน
แล้วเราจะทำยังไงให้มันวัดค่าได้ โดยเราไม่รู้ว่า $a และ $b เป็น string หรือ int หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Reality ที่ 29 ธันวาคม 2009, 19:08:00 ตัวแปรมันคนละชนิดกันมันยิ่งต้องไม่เท่ากันไม่ใช่เหรอ ผมแปลกใจว่าทำไมมันถึงออกมาเท่ากัน มันอาจจะ ปัดตัวแปรมาเช็คครับ (ผมเดานะครับ) เช่นแล้วเราจะทำยังไงให้มันวัดค่าได้ โดยเราไม่รู้ว่า $a และ $b เป็น string หรือ int ตัวแปรคนละชนิด แต่ค่ามันอาจจะเท่ากันได้ไงครับเช่นเลข 1,0 true, false แล้วเราจะวัดค่าได้ยังไง โดยที่เราไม่รู้ว่าเป็น string หรือ int ยังไงเราก็ต้องรู้ 1 ตัวละครับ ว่าเราจะเช็คอะไร ? เราก็ปัดตัวแปรทั้งสองก่อนเช็คให้เป็นชนิดนั้นๆ ไงครับ อาจจะใช้ (string) หรือ (int) นำหน้าเพื่อปัดเป็นชนิดนั้นๆ แล้วค่อยควบคุมก็ได้เช่นกัน หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: kurng ที่ 29 ธันวาคม 2009, 19:12:15 มันอาจจะไม่ได้หมายความว่ามีค่าเท่ากันครับ ไม่เชื่อลองใช้ === (= สามตัว จะเช็คด้วยว่าชนิดตัวแปรตรงกันไหม) คล้าย ๆ ข้อความข้างบนครับใช้ == สองตัว อาจจะหมายถึงการเช็คทางบูลีน (true, false) ซึ่ง a b c d หรือ ข้อความใดๆ มันก็เป็น false หมดอ่ะครับ (1 - true, 0 - false) ผิดพลาดอย่างไรขออภัย :-[ ผมเปิดหนังสือตอบ นะ ได้ความว่า ตัวแปร ทั้งสองตัว มันเป็นตัวแปรคนละชนิดกัน เมื่อนำมาเปรียบเทียบด้วย == จึงมีค่า เป็น true เนื่องจากไม่มีการเปรียบเทียบค่า ในที่นี้ ไม่ได้แปรว่า A=0 ตามที่ตั้งค่าให้มันแสดง แต่แปรว่า ค่าที่ได้ เป็น true จึง แสดง เปิดหนังสือตอบ ขอบคุณครับที่ให้ได้ทบทวน หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 19:25:42 ปกติ php มันเทียบค่าต่างชนิดได้ไม่ใช่เหรอครับ
คือถ้ามันจะไม่ได้ทั้งหมดก็ไม่ว่าอะไรแต่ แล้วทำไม A กับ 1 มีค่าไม่เท่ากัน โค๊ด: $a = "A"; คือถ้าใช้ เงื่อนไขว่า "ค่าคนละชนิดจะไม่เทียบค่า และจะออกมาเป็น true" แล้วทำไมทีงี้มันออกมา มีค่าไม่เท่ากันอ่ะครับ หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Reality ที่ 29 ธันวาคม 2009, 19:39:26 คือ มันก็เหมือนกันแหละครับ
เดาอีกเหมือนเดิม ถ้าให้ 1 - true, 0 - false ผมเคยบอกไปว่า ถ้าเป็นสตริง แล้วเราเช็คแบบข้ามชนิดยังงี้ php มัน(น่าจะ) เช็คโดยคิดว่าตัวแปรทั้งสองของเราเป็นบูลีน มันก็เลยสรุปมาว่า สตริง -> เป็น false ไปซะ อะไรประมาณนี้ หรือจะคิดว่า string มันแปลงมาเป็นเลขแล้วได้ 0 ก็ได้ มันอยู่ที่ใจเราอ่ะครับ เราอยากจะเข้าใจแบบไหน หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: kurng ที่ 29 ธันวาคม 2009, 19:42:01 หากจำไม่ผิด 0 กับ 1 เอง มันมีค่า ทางตรรกะ หมายถึงตัวมันเอง มีค่า เวลาเปลี่ยเทียบ หมายถึง ใช่ กับ ไม่ใช่อยู่แล้ว
ลองเปลี่ยน ค่า $b เป็น 2 ดูซิครับ ว่ามันให้ค่าอะไร หากมันออกมาเท่ากัน อาจแปลว่า "A"= 0 ในคำถามแรก หมายถึง จริงกับจริง มันเลยให้ค่าออกมาเป็นจริง "A"=1 ในคำถามที่ 2 หมายถึง จริง กับ เท็จ มันเลยออกมา เป็นเท็จ อาจหมายถึงอย่างนี้ก็ได้ ในเมื่อมันอ่านค่าตัวเลข กับตัวอักษรไม่ได้เลยอ่านค่า เป็นการเปรียบเทียบ มั่ง หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: tamiyalagu ที่ 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 หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Reality ที่ 29 ธันวาคม 2009, 20:21:02 ถ้างั้นผมก็คงอธิบายไม่ได้แล้วอะนะ (คงต้องไปถามผู้พัฒนา php ในตอนนี้เอง :wanwan004:)
"1" กับ 1 เช็คกันได้อาจจะเป็นเพราะว่า php มันฉลาดก็ได้ รู้ว่าตัวแปรสองตัวเป็นเลขเหมือนกัน เพราะผมลอง "3" กับ 3 - ผ่าน "4" กับ 3 - ไม่ผ่าน "34" กับ 3 - ผ่าน "43" กับ 3 - ไม่ผ่าน หรือมันอาจจะเช็คค่าที่ char ตัวแรก (รึเปล่า ?) ก็นั่นแหละ สุดท้ายเราก็ไม่รู้ว่าสุดท้ายแล้วมันใช้ตัวแปรชนิดไหนในการเทียบค่า มันอาจจะใช้ทั้งหมด แต่อาจจะไล่กันมาเรื่อยๆ ก็ได้ เพราะว่า php, perl มีข้อพิเศษตรงที่ตัวแปรมันยืดหยุ่นแบบเว่อร์ๆ นี้แหละ หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 20:30:55 เอ.. ทำไมของผม "34" กับ 3 มันไม่ผ่านอะไครับ
หรือเป็นที่เครื่องผมคนเดียวหว่า โดนไวรัสเปล่าเนี่ย :wanwan009: ช่วยทดลองดูอีกทีได้หรือเปล่าครับ อยากรุ้ว่าเป็นที่เครื่องหรือเป็นที่อะไร ทำไมมันไม่เหมือนกัน :wanwan011: โค๊ด: $a = "34"; หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Reality ที่ 29 ธันวาคม 2009, 20:34:44 เวน สงสัยผมเมา :o
ลองดูอีกรอบไม่ผ่านแหะ ผมคงเมาเองแหละ ผมใช้ echo '$a eq $b '; กับ echo '$a ne $b'; มึนเอง -.-' (อายจัง) :-[ (หนีดีกว่า!) อย่าตามมาน้าาาา :wanwan006: หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: fatman ที่ 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/language.types.string.php#language.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 เป็นจริงครับ :wanwan007: :wanwan007: หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 21:35:49 อ่าา ที่แท้มันเป็นเช่นนี้เอง
ปริศนาไขกระจ่างแล้ว ขอบคุณมากครับ (http://www.showwallpaper.com/image/emo_oni012.gif) หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: KMCORP ที่ 29 ธันวาคม 2009, 22:19:20 อ่านจากคู่มือมาครับ [url]http://php.net/manual/en/language.operators.comparison.php[/url] 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. - ถ้าเปรียบเทียบค่า ตัวเลขกับตัวหนังสือ ค่าที่เป็นตัวหนังสือจะถูกแปลงเป็นตัวเลขก่อนครับ ซึ่งวิธีแปลงจากตัวหนังสือเป็นตัวเลข อ้างจาก [url]http://www.php.net/manual/en/language.types.string.php#language.types.string.conversion[/url] 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 เป็นจริงครับ :wanwan007: :wanwan007: +1 ขอบคุณครับ ผมเองก็สงสัยเหมือนกัน หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Reality ที่ 30 ธันวาคม 2009, 03:35:38 +1 เช่นกัน
ผมก็โชว์เห่ยอยู่นานเลย :wanwan004: หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: JeffyPluS ที่ 30 ธันวาคม 2009, 03:58:36 ค่า Default ของ "A" น่าจะให้ค่าไว้ที่ 0 ซึ่งอาจจะเป็นเรื่องของตรรกะ คือ true / false
หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Rapid-Developer ที่ 30 ธันวาคม 2009, 09:03:20 ถ้าจะเปรียบเทียบว่า อะไรมันคือสิ่งๆนั้นจริงๆหรือเปล่า เช่นมันใช่ true false จริงหรือเปล่า จะใช้แบบนี้ครับ
โค๊ด: $a = "A"; หรือจะใช้ในการเช็ค type ของแต่ละชนิดได้ด้วยว่ามันใช่ type นั้นจริงๆหรือเปล่า เช่น ตังแปรนั้นเป็น array เหมือนกันหรือเปล่า หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: powerbeer001 ที่ 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"; } รับรองไม่เท่ากันแน่นอนครับครับ :P หัวข้อ: Re: ทำไม A กับ 0 ถึงมีค่าเท่ากัน เริ่มหัวข้อโดย: Rapid-Developer ที่ 30 ธันวาคม 2009, 09:21:23 ถ้าจะเปรียบเทียบ Type ใช้แค่ === ก็พอครับมันเป็นความสามารถที่ทาง PHP ทำขึ้นมาเพื่อแก้ปัญหาเรื่องนี้อยู่แล้ว
โค๊ด: if($a === $b ) |