ผลต่างระหว่างรุ่นของ "ภาษาพีเอชพี/ประเภทของตัวแปร/ข้อความ"
เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Zodlicious (คุย | ส่วนร่วม) →การแปลงเป็น string: แก้ไขลิงค์ |
Nullzerobot (คุย | ส่วนร่วม) ล โรบอต: เก็บกวาด |
||
บรรทัดที่ 1:
== String ==
ชนิด string คือ ข้อความ(กลุ่มตัวอักษร) โดยก่อน PHP 6 ตัวอักษรก็คือ byte ก็คือสามารถมีตัวอักษรได้ 256 แบบเท่านั้น และนี้ก็เลยเป็นเหตุผลที่ว่าทำไม PHP ถึงไม่สนับสนุน Unicode โดยพื้นฐาน
* เนื่องจาก PHP ไม่มีการจำกัดขนาดของ string จึงมักไม่มีปัญหากับ string ขนาดใหญ่ แต่ว่าขนาดของ string นั้นก็ถูกจำกัดด้วยเมโมรี่ของเครื่องที่รัน PHP อยู่
=== รูปแบบการใช้งาน ===
การกำหนดค่า string นั้นทำได้ 4 แบบ
# [[#เครื่องหมายคำพูดเดียว (')|ประกาศโดยใช้เครื่องหมายคำพูดเดียว]]
# [[#เครื่องหมายคำพูดคู่ (")|ประกาศโดยใช้เครื่องหมายคำพูดคู่]]
# [[#Heredoc|ประกาศโดยใช้รูปแบบของ heredoc]]
# [[#Nowdoc|ประกาศโดยใช้รูปแบบของ nowdoc]]
==== เครื่องหมายคำพูดเดียว (') ====
วิธีเรียบง่ายที่สุดในการกำหนด string คือ ล้อมรอบไว้ด้วยเครื่องหมายคำพูดเดียว (')
ถ้าต้องการใช้เครื่องหมาย ' ในข้อความนั้นก็ให้ใช้ \ นำหน้า ส่วนถ้าต้องการใช้เครื่องหมาย \ ก็ให้ใส่เป็น \\ โดยถ้าหากทำแบบนี้กับตัวอักขระอื่นที่ไม่ใช่ 2 ตัวนี้ก็จะมีการแสดง \ ออกมาด้วย
* ไม่เหมือนอีก 3 รูปแบบ เพราะว่า '''ตัวแปร''' และ '''escape sequences สำหรับตัวอักขระพิเศษ'''จะไม่ถูก ขยาย เวลาอยู่ใน (')
<source lang="php">
<?php
เส้น 36 ⟶ 38:
?>
</source>
==== เครื่องหมายคำพูดคู่ (") ====
ถ้าหาก string ถูกครอบด้วย (") แล้ว จะสามารถใช้งาน escape sequences ได้มากขึ้น
{|style="border: 1px dashed #8a8a8a; background:white"
| style="background:#e1e1e1" | สัญลักษณ์
| style="background:#e1e1e1" |ความหมาย
|-
| \n || linefeed (LF or 0x0A (10) in ASCII)
|-
| \r || carriage return (CR or 0x0D (13) in ASCII)
|-
| \t || horizontal tab (HT or 0x09 (9) in ASCII)
|-
| \v || vertical tab (VT or 0x0B (11) in ASCII) (since PHP 5.2.5)
|-
| \f || form feed (FF or 0x0C (12) in ASCII) (since PHP 5.2.5)
|-
| \\ || backslash
|-
| \$ || dollar sign
|-
| \" || double-quote
|-
| \[0-7]{1,3} ||
|-
| \x[0-9A-Fa-f]{1,2} || the sequence of characters matching the regular expression is a character in hexadecimal notation
|}
เช่นเดียวกันกับ (') ถ้ามีการใช้ \ กับตัวอักขระอื่น จะมีการแสดง \ ออกมาด้วย
เส้น 72 ⟶ 74:
?>
</source>
* โดยการใช้ (") ตัวแปรจะได้รับขยาย(ถูกแปลงเป็นค่าที่ตัวแปรนั้นเก็บไว้)
==== Heredoc ====
รูปแบบการใช้งานคือ <<< หลังจาก operator นี้ก็ใส่ identifier จากนั้นขึ้นบรรทัดใหม่ แล้วก็เป็นข้อความ และปิดท้ายด้วย identifier เดียวกัน อ่านแล้วอาจจะงงดูตัวอย่างจะง่ายกว่า
<source lang="php">
เส้น 83 ⟶ 85:
?>
</source>
* โดย Closing identifier นั้นต้องอยู่'''ตัวแรกสุด'''ในบรรทัด แบบไม่มีเว้นวรรค หรืออะไรมากั้นข้างหน้า และ'''ไม่มีตัวอักขระอื่นนอกเหนือจาก semicolon (;)'''
ข้อความแบบ Heredoc ก็เหมือนกับ ข้อความแบบ Double-quoted แบบไม่มีเครื่องหมาย (") นั้นหมายความว่าข้อความใน Heredoc ไม่จำเป็นต้องมีการใช้ escape แต่ว่าก็ สามารถใช้ได้ และ ตัวแปรในข้อความจะถูกแปลง
<source lang="php">
เส้น 96 ⟶ 98:
class foo
{
{
}
}
เส้น 117 ⟶ 119:
</source>
Outputs:
* สามารถนำ heredoc เป็น argument ของ function ได้
* heredoc เริ่มต้นใช้งานใน PHP4
==== Nowdoc ====
nowdoc ก็เหมือนกับ heredoc แต่เป็นรูปแบบของ Single-quoted (') แทน <br/>รูปแบบการใช้งานจะต่างกันตรงที่ identifier ตัวเปิดจะต้องใส่ ' ครอบไว้ด้วย
<source lang="php">
<?php
$a = <<<'EOD'
This type of declare can be in multiline
but this kind of declare is no need to escepe
EOD;
เส้น 134 ⟶ 136:
class foo
{
{
}
}
เส้น 155 ⟶ 157:
</source>
Outputs:
=== การแปลงตัวแปรในข้อความ ===
เมื่อใช้ (") หรือ heredoc ในการกำหนดค่า string จะมีการแปลงตัวแปรภายใน<br/><br/>จะมีรูปแบบการใช้งาน 2 รูปแบบคือ [[#แบบง่าย|แบบง่าย]] และ [[#แบบซับซ้อน|แบบซับซ้อน]]
==== แบบง่าย ====
ถ้ามีการเจอ $ ในข้อความ PHP parser จะทำการหาชื่อตัวแปรที่เป็นไปได้ แล้วนำค่าของตัวแปรนั้นแทนที่ลงในข้อความ หรือจะครอบตัวแปรด้วย { } เพื่อเจาะจงชื่อตัวแปรก็ได้
<source lang="php">
เส้น 205 ⟶ 207:
?>
</source>
==== แบบซับซ้อน ====
ที่เรียกว่าแบบซับซ้อน ไม่ใช่เพราะมันรูปแบบซับซ้อน แต่เพราะสามารถใช้งานได้ซับซ้อนกว่า
ในความจริงแล้วค่าทุกค่าใน namespace สามารถใช้งานใน ข้อความ ได้เหมือนอย่างที่ใช้งานนอกข้อความ โดยต้องครอบไว้ด้วย {$ }
<source lang="php">
เส้น 223 ⟶ 227:
// ใช้งานได้
echo "This square is {$square->width}00 centimeters broad.";
// ใช้งานได้
เส้น 231 ⟶ 235:
// จริง ๆ แล้วมันใช้งานได้อยู่ แต่ว่า PHP จะไปมองหา constant ชื่อ foo ก่อน
// แล้วจะเกิด Error - undefined constant
echo "This is wrong: {$arr[foo][3]}";
// ใช้งานได้ เมื่อยู่ในข้อความ
// ทุกครั้งที่อ้างถึง array หลายมิติ ให้ครอบไว้ด้วย {$ } เสมอ
echo "This works: {$arr['foo'][3]}";
เส้น 249 ⟶ 253:
?>
</source>
* ใน PHP5 ขึ้นไป Function และ Method สามารถใช้งานใน {$ } ได้
=== การเข้าถึงและแก้ไข อักขระ ใน string ===
มีรูปแบบการใช้งานคล้ายกับ array
<source lang="php">
เส้น 261 ⟶ 265:
$third = $str[2];
// เอาตัวอักขระตัวสุดท้ายของ $str
// เพราะ strlen() ทำการบอกจำนวนตัวอักษรใน string ที่ส่งผ่าน โดยคืนค่าเป็น integer
// ในที่นี้ก็เลยเทียบได้กับ $str[21-1] ก็คืออักขระ .
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
// เปลี่ยนแปลงอักขระตัวสุดท้าย
เส้น 273 ⟶ 277:
?>
</source>
* การเข้าถึงตัวแปรชนิดอื่นโดยใช้ [] หรือ {} ค่าที่ได้จะเป็น '''NULL'''
=== การเชื่อมข้อความ ===
การจะเชื่อมข้อความใส่กันนั้น อาจจะใช้ . (จุด, ดอท) operator เอา
<source lang="php">
เส้น 282 ⟶ 286:
?>
</source>
=== การแปลงเป็น string ===
การแปลงค่าเป็น string นั้นสามารถทำได้โดยใช้ (string) แปลงหรือใช้ strval() การแปลงค่าเป็น string จะเกิดขึ้นโดยอัตโนมัติเมื่อจำเป็นต้องใช้ อย่างที่เป็นใน echo() หรือ print() หรือเมื่อมีการนำค่าชนิดอื่นมาเทียบกับค่า string
ค่า [[ภาษาพีเอชพี/คู่มืออ้างอิงภาษา/ประเภทของตัวแปร/จำนวนเต็ม|integer]] หรือ [[ภาษาพีเอชพี/ประเภทของตัวแปร/จำนวนทศนิยม|float]] แปลงเป็น string นั้นก็จะเป็นการแปลงเลขเป็นข้อความ เช่น 50.0 แปลงเป็น "50.0"<br/><br/>▼
ค่า [[ภาษาพีเอชพี/ประเภทของตัวแปร/
[[ภาษาพีเอชพี/ประเภทของตัวแปร/Objects|Object]] จะถูกแปลงเป็น ข้อความ "Object" เสมอ<br/><br/>▼
[[ภาษาพีเอชพี/ประเภทของตัวแปร/Resources|Resource]] จะถูกแปลงเป็น ข้อความ ในรูปแบบ "Resource id #1" โดย ''1'' คือ unique number ที่กำหนดให้ resource โดย PHP ตอนที่รัน<br/><br/>▼
▲ค่า [[ภาษาพีเอชพี/คู่มืออ้างอิงภาษา/ประเภทของตัวแปร/จำนวนเต็ม|integer]] หรือ [[ภาษาพีเอชพี/ประเภทของตัวแปร/จำนวนทศนิยม|float]] แปลงเป็น string นั้นก็จะเป็นการแปลงเลขเป็นข้อความ เช่น 50.0 แปลงเป็น "50.0"
[[ภาษาพีเอชพี/ประเภทของตัวแปร/Arrays|Array]] จะถูกแปลงเป็น ข้อความ "Array" เสมอ เป็นเหตุให้ echo() หรือ print() ไม่สามารถแสงค่าที่เก็บใน array ได้ด้วยตนเอง ต้องใช้รูปแบบที่มีการอ้างอิงถึง ดัชนี(index)<br/>
▲[[ภาษาพีเอชพี/ประเภทของตัวแปร/Resources|Resource]] จะถูกแปลงเป็น ข้อความ ในรูปแบบ "Resource id #1" โดย ''1'' คือ unique number ที่กำหนดให้ resource โดย PHP ตอนที่รัน
'''NULL''' จะแปลงเป็น empty string เสมอ
=== แปลง string เป็นเลข ===
โดยปกติเมื่อมีการแปลง string เป็นเลข จะแปลงเป็น integer แต่ถ้าหากมี '.' , 'e' หรือ 'E' อยู่ในข้อความจะแปลงเป็น float
ค่าที่จะได้นั้นขึ้นอยู่กับส่วนเริ่มต้นของ ข้อความ ถ้า ข้อความ ขึ้นต้นด้วย จำนวนที่ถูกต้อง ค่านั้นก็จะเป็น ค่าที่แปลงได้ นอกเหนือจากนั้นจะแปลงได้เป็น 0 (ศูนย์) รูปแบบค่า จำนวนที่ถูกต้อง ก็คืออาจจะขึ้นต้นด้วยเครื่องหมายบวกหรือลบ ตามด้วยตัวเลข(อาจจะมีจุดทศนิยม) แล้วตามด้วย เลขยกกำลัง โดยเลขยกกำลังนั้น คือ e หรือ E ตามด้วยตัวเลข
<source lang="php">
เส้น 303 ⟶ 321:
$foo = 4 + "10.2 Little Piggies"; // float (14.2)
$foo = "10.0 pigs " + 1; // float (11)
$foo = "10.0 pigs " + 1.0; // float (11)
?>
</source>
* ใช้ ord() และ chr() ในการแปลงไปกลับระหว่าง ASCII code กับ อักขระ
|