ThaiSEOBoard.com

พัฒนาเว็บไซต์ => Programming => ข้อความที่เริ่มโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 18:19:07



หัวข้อ: ทำไม A กับ 0 ถึงมีค่าเท่ากัน
เริ่มหัวข้อโดย: tamiyalagu ที่ 29 ธันวาคม 2009, 18:19:07
โค๊ด:
	
$a = "A";
$b = 0;
if($a == $b){
echo "$a กับ $b มีค่าเท่ากัน";
}else{
echo "$a กับ $b มีค่าไม่เท่ากัน";
}

ไม่ทราบเป็นที่เครื่องผมคนเดียวหรือเปล่า ใครว่างลองเอาสคิปนี้ไปรันดู ทำไมของผมมันออกมาว่า 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";
$b = 1;
if($a == $b){
echo "$a กับ $b มีค่าเท่ากัน";
}else{
echo "$a กับ $b มีค่าไม่เท่ากัน";
}

คือถ้าใช้ เงื่อนไขว่า "ค่าคนละชนิดจะไม่เทียบค่า และจะออกมาเป็น 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";
$b = 3;
if($a == $b){
echo "$a กับ $b มีค่าเท่ากัน";
}else{
echo "$a กับ $b มีค่าไม่เท่ากัน";
}


หัวข้อ: 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";
$b  = 0;

if( $a === $b ) { echo  "true"; } else { echo "false"; }


หรือจะใช้ในการเช็ค 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 )