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

เนื้อหาที่ลบ เนื้อหาที่เพิ่ม
Joojle (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
Zodlicious (คุย | ส่วนร่วม)
ไม่มีความย่อการแก้ไข
บรรทัดที่ 1:
==String==
'''ข้อความ (String)''' เก็บค่าตัวอักขระ ที่เรียงต่อกันซึ่งสามารถประกาศได้ทั้งหมด 4 รูปแบบ
ชนิด 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
echo 'แบบนี้คือ string ง่าย ๆ';
$a = 'Thailand';
 
echo 'คุณสามารที่จะใส่บรรทัดใหม่
ได้โดยการทำแบบนี้
โดยไม่มีการ error';
 
// Outputs: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';
 
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';
 
// Outputs: You deleted C:\*.*?
echo 'You deleted C:\*.*?';
 
// Outputs: This will not expand: \n a newline
echo 'This will not expand: \n a newline';
 
// Outputs: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>
</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
|}
เช่นเดียวกันกับ (') ถ้ามีการใช้ \ กับตัวอักขระอื่น จะมีการแสดง \ ออกมาด้วย
<source lang="php">
<?php
$a = "Thailand";
 
echo "This is \p ."; // Outputs: This is \p .
 
echo "I love $a"; // Outputs: I love Thailand
?>
</source>
*โดยการใช้ (") ตัวแปรจะได้รับขยาย(ถูกแปลงเป็นค่าที่ตัวแปรนั้นเก็บไว้)
*ประกาศโดยใช้รูปแบบของ heredoc
====Heredoc====
รูปแบบการใช้งานคือ <<< หลังจาก operator นี้ก็ใส่ identifier จากนั้นขึ้นบรรทัดใหม่ แล้วก็เป็นข้อความ และปิดท้ายด้วย identifier เดียวกัน อ่านแล้วอาจจะงงดูตัวอย่างจะง่ายกว่า
<source lang="php">
<?php
เส้น 21 ⟶ 83:
?>
</source>
*โดย Closing identifier นั้นต้องอยู่'''ตัวแรกสุด'''ในบรรทัด แบบไม่มีเว้นวรรค หรืออะไรมากั้นข้างหน้า และ'''ไม่มีตัวอักขระอื่นนอกเหนือจาก semicolon (;)'''
*ประกาศโดยใช้รูปแบบของ nowdoc
ข้อความแบบ Heredoc ก็เหมือนกับ ข้อความแบบ Double-quoted แบบไม่มีเครื่องหมาย (") นั้นหมายความว่าข้อความใน Heredoc ไม่จำเป็นต้องมีการใช้ escape แต่ว่าก็ สามารถใช้ได้ และ ตัวแปรในข้อความจะถูกแปลง
<source lang="php">
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
 
/* More complex example, with variables. */
class foo
{
var $foo;
var $bar;
 
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
 
$foo = new foo();
$name = 'MyName';
 
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
</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
เส้น 28 ⟶ 130:
but this kind of declare is no need to escepe
EOD;
 
/* More complex example, with variables. */
class foo
{
public $foo;
public $bar;
 
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
 
$foo = new foo();
$name = 'MyName';
 
echo <<<'EOT'
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
EOT;
?>
</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">
<?php
$beer = 'Heineken';
echo "$beer's taste is great"; // ใช้งานได้ เพราะ ( ' ) นั้นไม่สามารถเป็นชื่อตัวแปรได้
echo "He drank some $beers"; // ไม่สามารถใช้งานได้ เพราะ 's' ทำให้กลายเป็นตัวแปรชื่อ $beers ซึ่งมันไม่มี
echo "He drank some ${beer}s"; // ใช้งานได้
echo "He drank some {$beer}s"; // ใช้งานได้
?>
</source>
ถ้าจะใช้กับ array หรือ object จะต้องมีการใช้งานที่ถูกต้อง
<source lang="php">
<?php
// ตัวอย่างนี้ยกตัวอย่างการใช้ใน ข้อความ
// ถ้าอยู่นอกข้อความไม่ต้องใช้ { } ครอบ
 
// แสดง Error ทั้งหมด
error_reporting(E_ALL);
 
$fruits = array('strawberry' => 'red', 'banana' => 'yellow');
 
// ใช้งานได้ แต่จำไว้ว่ามันจะทำงาน ต่าง ออกไปเมื่ออยู่นอก ข้อความ
echo "A banana is $fruits[banana].";
 
// ใช้งานได้
echo "A banana is {$fruits['banana']}.";
 
// ใช้งานได้ แต่ PHP จะมองหา constant ที่ชื่อ banana ก่อน
echo "A banana is {$fruits[banana]}.";
 
// ไม่สามารถใช้งานได้ ต้องใช้ { } ครอบไว้
echo "A banana is $fruits['banana'].";
 
// ใช้งานได้
echo "A banana is " . $fruits['banana'] . ".";
 
// ใช้งานได้
echo "This square is $square->width meters broad.";
 
// ไม่สามารถใช้งานได้ ดูวิธีแก้ไขได้ในส่วนของ แบบซับซ้อน
echo "This square is $square->width00 centimeters broad.";
?>
</source>
====แบบซับซ้อน====
ที่เรียกว่าแบบซับซ้อน ไม่ใช่เพราะมันรูปแบบซับซ้อน แต่เพราะสามารถใช้งานได้ซับซ้อนกว่า<br/> <br/>
ในความจริงแล้วค่าทุกค่าใน namespace สามารถใช้งานใน ข้อความ ได้เหมือนอย่างที่ใช้งานนอกข้อความ โดยต้องครอบไว้ด้วย {$ }
<source lang="php">
<?php
// แสดง Error ทั้งหมด
error_reporting(E_ALL);
 
$great = 'fantastic';
 
// ไม่สามารถใช้งานได้ outputs: This is { fantastic}
echo "This is { $great}";
 
// ใช้งานได้ outputs: This is fantastic
echo "This is {$great}";
echo "This is ${great}";
 
// ใช้งานได้
echo "This square is {$square->width}00 centimeters broad.";
 
// ใช้งานได้
echo "This works: {$arr[4][3]}";
 
// รูปแบบนี้ผิดเหมือนที่ $foo[bar] ผิดเมื่ออยู่นอก ข้อความ
// จริง ๆ แล้วมันใช้งานได้อยู่ แต่ว่า PHP จะไปมองหา constant ชื่อ foo ก่อน
// แล้วจะเกิด Error - undefined constant
echo "This is wrong: {$arr[foo][3]}";
 
// ใช้งานได้ เมื่อยู่ในข้อความ
// ทุกครั้งที่อ้างถึง array หลายมิติ ให้ครอบไว้ด้วย {$ } เสมอ
echo "This works: {$arr['foo'][3]}";
 
// ใช้งานได้
echo "This works: " . $arr['foo'][3];
 
echo "This works too: {$obj->values[3]->name}";
 
echo "This is the value of the var named $name: {${$name}}";
 
echo "This is the value of the var named by the return value of getName(): {${getName()}}";
 
echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}";
?>
</source>
*ใน PHP5 ขึ้นไป Function และ Method สามารถใช้งานใน {$ } ได้
===การเข้าถึงและแก้ไข อักขระ ใน string===
มีรูปแบบการใช้งานคล้ายกับ array
<source lang="php">
<?php
// เอาตัวอักขระตัวแรกของ $str ก็คือ T
$str = 'This is a test.';
$first = $str[0];
 
// เอาตัวอักขระตัวที่สามของ $str
$third = $str[2];
 
// เอาตัวอักขระตัวสุดท้ายของ $str
// เพราะ strlen() ทำการบอกจำนวนตัวอักษรใน string ที่ส่งผ่าน โดยคืนค่าเป็น integer
// ในที่นี้ก็เลยเทียบได้กับ $str[21-1] ก็คืออักขระ .
$str = 'This is still a test.';
$last = $str[strlen($str)-1];
 
// เปลี่ยนแปลงอักขระตัวสุดท้าย
$str = 'Look at the sea';
$str[strlen($str)-1] = 'e';
 
?>
</source>
*การเข้าถึงตัวแปรชนิดอื่นโดยใช้ [] หรือ {} ค่าที่ได้จะเป็น '''NULL'''
===การเชื่อมข้อความ===
การจะเชื่อมข้อความใส่กันนั้น อาจจะใช้ . (จุด, ดอท) operator เอา
<source lang="php">
<?php
$str = "is a";
echo "This " . $str . " book"; // Outputs: This is a book
?>
</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|Array]] จะถูกแปลงเป็น ข้อความ "Array" เสมอ เป็นเหตุให้ echo() หรือ print() ไม่สามารถแสงค่าที่เก็บใน array ได้ด้วยตนเอง ต้องใช้รูปแบบที่มีการอ้างอิงถึง ดัชนี(index)<br/><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">
<?php
$foo = 1 + "10.5"; // float (11.5)
$foo = 1 + "-1.3e3"; // float (-1299)
$foo = 1 + "bob-1.3e3"; // integer (1)
$foo = 1 + "bob3"; // integer (1)
$foo = 1 + "10 Small Pigs"; // integer (11)
$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 กับ อักขระ