ผลต่างระหว่างรุ่นของ "ภาษาพีเอชพี/ประเภทของตัวแปร/ข้อความ"

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Zodlicious (คุย | ส่วนร่วม)
→‎การแปลงเป็น string: แก้ไขลิงค์
Nullzerobot (คุย | ส่วนร่วม)
โรบอต: เก็บกวาด
บรรทัดที่ 1:
== String ==
ชนิด string คือ ข้อความ(กลุ่มตัวอักษร) โดยก่อน PHP 6 ตัวอักษรก็คือ byte ก็คือสามารถมีตัวอักษรได้ 256 แบบเท่านั้น และนี้ก็เลยเป็นเหตุผลที่ว่าทำไม PHP ถึงไม่สนับสนุน Unicode โดยพื้นฐาน
* เนื่องจาก PHP ไม่มีการจำกัดขนาดของ string จึงมักไม่มีปัญหากับ string ขนาดใหญ่ แต่ว่าขนาดของ string นั้นก็ถูกจำกัดด้วยเมโมรี่ของเครื่องที่รัน PHP อยู่
=== รูปแบบการใช้งาน ===
การกำหนดค่า string นั้นทำได้ 4 แบบ
# [[#เครื่องหมายคำพูดเดียว (')|ประกาศโดยใช้เครื่องหมายคำพูดเดียว]]
# [[#เครื่องหมายคำพูดคู่ (")|ประกาศโดยใช้เครื่องหมายคำพูดคู่]]
# [[#Heredoc|ประกาศโดยใช้รูปแบบของ heredoc]]
# [[#Nowdoc|ประกาศโดยใช้รูปแบบของ nowdoc]]
==== เครื่องหมายคำพูดเดียว (') ====
วิธีเรียบง่ายที่สุดในการกำหนด string คือ ล้อมรอบไว้ด้วยเครื่องหมายคำพูดเดียว (')<br/>
 
 
ถ้าต้องการใช้เครื่องหมาย ' ในข้อความนั้นก็ให้ใช้ \ นำหน้า ส่วนถ้าต้องการใช้เครื่องหมาย \ ก็ให้ใส่เป็น \\ โดยถ้าหากทำแบบนี้กับตัวอักขระอื่นที่ไม่ใช่ 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} || the sequence of characters matching the regular expression is a character in octal notation
|-
| \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
{
var $foo;
var $bar;
 
function foo()
{
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
}
 
เส้น 117 ⟶ 119:
</source>
Outputs:
My name is "MyName". I am printing some Foo.
Now, I am printing some Bar2.
This should print a capital 'A': A
* สามารถนำ 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
{
public $foo;
public $bar;
 
function foo()
{
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
}
 
เส้น 155 ⟶ 157:
</source>
Outputs:
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
 
=== การแปลงตัวแปรในข้อความ ===
เมื่อใช้ (") หรือ heredoc ในการกำหนดค่า string จะมีการแปลงตัวแปรภายใน<br/><br/>จะมีรูปแบบการใช้งาน 2 รูปแบบคือ [[#แบบง่าย|แบบง่าย]] และ [[#แบบซับซ้อน|แบบซับซ้อน]]
==== แบบง่าย ====
ถ้ามีการเจอ $ ในข้อความ PHP parser จะทำการหาชื่อตัวแปรที่เป็นไปได้ แล้วนำค่าของตัวแปรนั้นแทนที่ลงในข้อความ หรือจะครอบตัวแปรด้วย { } เพื่อเจาะจงชื่อตัวแปรก็ได้
<source lang="php">
เส้น 205 ⟶ 207:
?>
</source>
==== แบบซับซ้อน ====
ที่เรียกว่าแบบซับซ้อน ไม่ใช่เพราะมันรูปแบบซับซ้อน แต่เพราะสามารถใช้งานได้ซับซ้อนกว่า<br/> <br/>
 
 
ในความจริงแล้วค่าทุกค่าใน 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<br/><br/>
 
ค่า [[ภาษาพีเอชพี/ประเภทของตัวแปร/บูลีน|boolean]] '''TRUE''' จะแปลงเป็น ข้อความ "1" และ '''FALSE''' จะแปลงเป็น "" (empty string) ทำให้สามารถแปลงไปกลับระหว่าง boolean และ string ได้<br/><br/>
 
ค่า [[ภาษาพีเอชพี/คู่มืออ้างอิงภาษา/ประเภทของตัวแปร/จำนวนเต็ม|integer]] หรือ [[ภาษาพีเอชพี/ประเภทของตัวแปร/จำนวนทศนิยม|float]] แปลงเป็น string นั้นก็จะเป็นการแปลงเลขเป็นข้อความ เช่น 50.0 แปลงเป็น "50.0"<br/><br/>
ค่า [[ภาษาพีเอชพี/ประเภทของตัวแปร/Arraysบูลีน|Arrayboolean]] '''TRUE''' จะถูกแปลงเป็น ข้อความ "Array1" เสมอและ '''FALSE''' จะแปลงเป็นเหตุให้ echo()"" หรือ print(empty string) ไม่ทำให้สามารถแสงค่าที่เก็บในแปลงไปกลับระหว่าง arrayboolean ได้ด้วยตนเองและ ต้องใช้รูปแบบที่มีการอ้างอิงถึงstring ดัชนี(index)<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"<br/><br/>
 
 
[[ภาษาพีเอชพี/ประเภทของตัวแปร/Arrays|Array]] จะถูกแปลงเป็น ข้อความ "Array" เสมอ เป็นเหตุให้ echo() หรือ print() ไม่สามารถแสงค่าที่เก็บใน array ได้ด้วยตนเอง ต้องใช้รูปแบบที่มีการอ้างอิงถึง ดัชนี(index)<br/>
 
 
[[ภาษาพีเอชพี/ประเภทของตัวแปร/Objects|Object]] จะถูกแปลงเป็น ข้อความ "Object" เสมอ<br/><br/>
 
 
[[ภาษาพีเอชพี/ประเภทของตัวแปร/Resources|Resource]] จะถูกแปลงเป็น ข้อความ ในรูปแบบ "Resource id #1" โดย ''1'' คือ unique number ที่กำหนดให้ resource โดย PHP ตอนที่รัน<br/><br/>
 
 
'''NULL''' จะแปลงเป็น empty string เสมอ
 
=== แปลง string เป็นเลข ===
โดยปกติเมื่อมีการแปลง string เป็นเลข จะแปลงเป็น integer แต่ถ้าหากมี '.' , 'e' หรือ 'E' อยู่ในข้อความจะแปลงเป็น float<br/><br/>
 
 
ค่าที่จะได้นั้นขึ้นอยู่กับส่วนเริ่มต้นของ ข้อความ ถ้า ข้อความ ขึ้นต้นด้วย จำนวนที่ถูกต้อง ค่านั้นก็จะเป็น ค่าที่แปลงได้ นอกเหนือจากนั้นจะแปลงได้เป็น 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 กับ อักขระ