ฉันสับสนเล็กน้อยว่าทำไมฉันเห็นบางโค้ดใน PHP โดยมีสตริงอยู่ในเครื่องหมายคำพูดเดี่ยวและบางครั้งก็เป็นเครื่องหมายคำพูดคู่
ฉันเพิ่งรู้ใน. NET หรือภาษา C หากอยู่ในเครื่องหมายคำพูดเดียวนั่นหมายความว่ามันเป็นตัวละครไม่ใช่สตริง
ฉันสับสนเล็กน้อยว่าทำไมฉันเห็นบางโค้ดใน PHP โดยมีสตริงอยู่ในเครื่องหมายคำพูดเดี่ยวและบางครั้งก็เป็นเครื่องหมายคำพูดคู่
ฉันเพิ่งรู้ใน. NET หรือภาษา C หากอยู่ในเครื่องหมายคำพูดเดียวนั่นหมายความว่ามันเป็นตัวละครไม่ใช่สตริง
คำตอบ:
สตริง PHPสามารถระบุได้ไม่เพียง แต่ในสองวิธี แต่ในสี่วิธี
\'
และเพื่อแสดงเฉือนกลับมาคุณจะสามารถหนีมันด้วย backslash อื่น\\
(ดังนั้นใช่สตริงที่ยกมาแม้เพียงครั้งเดียวมีการแยกวิเคราะห์ )$type
ที่จะมองหาตัวแปรecho "The $types are"
$types
เพื่อหลีกเลี่ยงการใช้งานนี้echo "The {$type}s are"
คุณสามารถใส่เครื่องหมายวงเล็บปีกกาซ้ายก่อนหรือหลังเครื่องหมายดอลลาร์ ดูที่การแยกวิเคราะห์สตริงเพื่อดูวิธีการใช้ตัวแปรอาเรย์และอื่น ๆ<<<
มันเริ่มต้นด้วย หลังจากโอเปอเรเตอร์นี้จะมีการระบุรหัสจากนั้นขึ้นบรรทัดใหม่ สายอักขระดังต่อไปนี้แล้วตัวระบุเดียวกันอีกครั้งเพื่อปิดใบเสนอราคา คุณไม่จำเป็นต้องหลีกเลี่ยงคำพูดในรูปแบบนี้<<<
ลำดับที่ใช้สำหรับ heredocs <<<'EOT'
แต่ระบุซึ่งต่อไปนี้จะถูกล้อมรอบในราคาเดียวเช่น ไม่มีการแยกวิเคราะห์ใน nowdocหมายเหตุ: เครื่องหมายคำพูดเดี่ยวภายในเครื่องหมายคำพูดเดี่ยวและเครื่องหมายคำพูดคู่ภายในเครื่องหมายคำพูดคู่จะต้องหลีกเลี่ยง:
$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";
ความเร็ว:
ฉันจะไม่ใส่น้ำหนักมากเกินไปสำหรับการเสนอราคาเดียวที่เร็วกว่าการเสนอราคาสองเท่า พวกเขาอาจเร็วกว่าในบางสถานการณ์ ต่อไปนี้เป็นบทความที่อธิบายวิธีการหนึ่งที่การเสนอราคาแบบเดี่ยวและคู่มีความรวดเร็วพอ ๆ กันตั้งแต่ PHP 4.3 ( Useless Optimizations
ไปทางด้านล่างส่วนC
) นอกจากนี้หน้าเบนช์มาร์กนี้มีการเปรียบเทียบเปรียบเทียบกับการเสนอราคาสองครั้งเดี่ยว การเปรียบเทียบส่วนใหญ่เหมือนกัน มีการเปรียบเทียบหนึ่งที่ราคาสองครั้งจะช้ากว่าราคาเดียว
\n
สิ่งอื่นใดในPHP
รหัสของฉันอยู่ในเครื่องหมายคำพูดเดี่ยว
"
เครื่องหมายคำพูดคู่นั้นเป็นเพียงเรื่องในอดีต การอัปเดตได้เพิ่มการประมวลผลคำพูดสองเท่าให้เร็วขึ้นในทุกวันนี้
สิ่งต่าง ๆ จะได้รับการประเมินด้วยเครื่องหมายคำพูดคู่ แต่ไม่ใช่แบบเดี่ยว
$s = "dollars";
echo 'This costs a lot of $s.'; // This costs a lot of $s.
echo "This costs a lot of $s."; // This costs a lot of dollars.
$mailbody = 'I want a line break:\nDone.';
กำลังรักษาความ\n
มีชีวิต โดยที่: $mailbody = "I want a line break:\nDone.";
จะแยกตัวแบ่งบรรทัด
$testWithAsciiAndUtf8Characters = "\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!";
$simpleTest = '\x48\x41\x4c\114\117 \u{0147}\u{012B}\u{0144}\u{014D}!';
ลำดับอักขระใน$testWithAsciiAndUtf8Characters
ถูกแปลงเป็นสตริงด้วยตัวอักษรจริง
'
ที่ยกมาเดี่ยววิธีที่ง่ายที่สุดในการระบุสตริงคือใส่ไว้ในเครื่องหมายคำพูดเดี่ยว โดยทั่วไปการเสนอราคาจะเร็วกว่าและทุกอย่างที่อยู่ภายในถือว่าเป็นสตริงธรรมดา
ตัวอย่าง:
echo 'Start with a simple string';
echo 'String\'s apostrophe';
echo 'String with a php variable'.$name;
"
คู่ที่ยกมาใช้เครื่องหมายอัญประกาศคู่ใน PHP เพื่อหลีกเลี่ยงการใช้เครื่องหมายจุดเพื่อแยกรหัส (หมายเหตุ: ใช้เครื่องหมายปีกกา{}
เพื่อรวมตัวแปรหากคุณไม่ต้องการใช้.
ตัวดำเนินการเรียงต่อกัน ( ) ในสตริง
ตัวอย่าง:
echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";
ใช่. มันเร็วกว่าเล็กน้อยในการใช้เครื่องหมายคำพูดเดี่ยว
PHP จะไม่ใช้การประมวลผลเพิ่มเติมเพื่อตีความสิ่งที่อยู่ในเครื่องหมายคำพูดเดียว เมื่อคุณใช้อัญประกาศ PHP ต้องแยกวิเคราะห์เพื่อตรวจสอบว่ามีตัวแปรใด ๆ ภายในสตริง
\'
ที่จะหลบหนี apostrophe เดียวสำหรับการใช้งานภายในสตริง (หรือ\\'
เพื่อแสดงเครื่องหมาย) โปรดทราบว่าลำดับการยกเว้นแบบดั้งเดิมเช่น\n
จะไม่ถูกวิเคราะห์ด้วยอักขระขึ้นบรรทัดใหม่ PHP เอกสารบนสตริง
สตริงที่ยกมาเดี่ยวไม่มีตัวแปรภายในมันตีความ สตริงที่มีเครื่องหมายคำพูดคู่ทำ
นอกจากนี้สตริงที่มีเครื่องหมายคำพูดคู่สามารถมีเครื่องหมายอัญประกาศเดี่ยวโดยไม่มีเครื่องหมายแบ็กสแลชในขณะที่สตริงเครื่องหมายคำพูดเดี่ยวสามารถมีเครื่องหมายคำพูดที่ไม่ใช้ค่า Escape
สตริงที่อ้างถึงเดี่ยวเร็วกว่าขณะรันไทม์เนื่องจากไม่จำเป็นต้องแยกวิเคราะห์
ใน PHP ทั้ง'my name'
และ"my name"
เป็นสตริง คุณสามารถอ่านเพิ่มเติมได้ที่คู่มือของ PHP
สิ่งที่คุณควรรู้คือ
$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'
ใน PHP คนใช้คำพูดเดียวที่จะกำหนดสตริงคงที่เช่น'a'
, 'my name'
, ในขณะที่ใช้คำพูดสองครั้งเพื่อกำหนดสตริงประกอบด้วยตัวระบุเช่น'abc xyz'
"a $b $c $d"
และอีกอย่างคือ
echo 'my name';
เร็วกว่า
echo "my name";
แต่
echo 'my ' . $a;
ช้ากว่า
echo "my $a";
นี่เป็นความจริงสำหรับการใช้งานสตริงอื่น ๆ
<?php
$fname = "David";
// Single quotes
echo 'My name is $fname.'; // My name is $fname.
// Double quotes
echo "My name is $fname."; // My name is David.
// Curly braces to isolate the name of the variable
echo "My name is {$fname}."; // My name is David.
// Example of heredoc
echo $foo = <<<abc
My name is {$fname}
abc;
// Example of nowdoc
echo <<< 'abc'
My name is "$name".
Now, I am printing some
abc;
?>
ใน PHP ข้อความคำพูดเดียวถือเป็นค่าสตริงและข้อความคำพูดคู่จะแยกตัวแปรโดยการแทนที่และการประมวลผลค่าของพวกเขา
$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test
ที่นี่ double quote แจงค่าและ single quote ถือว่าเป็นค่าสตริง (โดยไม่ต้องวิเคราะห์$test
ตัวแปร)
อักขระที่ล้อมรอบทั้งสองชนิดเป็นสตริง การเสนอราคาประเภทหนึ่งใช้เพื่อสะดวกในการปิดการเสนอราคาประเภทอื่น และ"'"
'"'
ความแตกต่างที่ใหญ่ที่สุดระหว่างประเภทของอัญประกาศคือการอ้างอิงตัวระบุที่ล้อมรอบจะถูกแทนที่ภายในเครื่องหมายคำพูดคู่ แต่ไม่อยู่ในเครื่องหมายคำพูดเดี่ยว
ความแตกต่างระหว่างการใช้เครื่องหมายคำพูดเดี่ยวและเครื่องหมายคำพูดคู่ใน php คือถ้าเราใช้เครื่องหมายคำพูดเดี่ยวในคำสั่ง echo จะถือว่าเป็นสตริง ... แต่ถ้าเราใส่ชื่อตัวแปรภายในเครื่องหมายคำพูดคู่มันจะส่งออกค่าของตัวแปรนั้นพร้อมกับสตริง
นี่คือความเป็นไปได้ของการเสนอราคาเดียวและสองครั้งพร้อมตัวแปร
$world = "world";
"Hello '.$world.' ";
'hello ".$world."';
สิ่งหนึ่ง:
มันเป็นสิ่งสำคัญมากที่จะทราบว่าสอดคล้องกับตัวบ่งชี้ปิดHeredocต้องไม่มีส่วนผสมของตัวละครอื่น ๆ ยกเว้นเซมิโคลอน (;) ซึ่งหมายความว่าโดยเฉพาะอย่างยิ่งที่ตัวระบุอาจไม่เยื้องและอาจไม่มีช่องว่างหรือแท็บใด ๆก่อนหรือหลังเครื่องหมายอัฒภาค
ตัวอย่าง:
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
บางทีฉันอาจจะสายไปหน่อยและปิดหัวข้อเล็กน้อย
คุณไม่จำเป็นต้องเลือกเนื่องจากเนื้อหาของสตริงระหว่าง:
alert("It's \"game\" time.");
หรือalert('It\'s "game" time.');
หากคุณคุ้นเคยกับการใช้เครื่องหมายอัญประกาศภาษาอังกฤษและอักขระที่ถูกต้องสำหรับเครื่องหมายอัญประกาศเดี่ยวคุณสามารถใช้เครื่องหมายอัญประกาศคู่หรือเดี่ยวได้เพราะจะไม่สำคัญอีกต่อไป:
alert("It’s “game” time.");
และalert('It’s “game” time.');
${variablename}
น่าเสียดายที่มันไม่เป็นไปตามอนุสัญญาเดียวกับเชลล์สคริปต์คือ