Apa perbedaan antara string dengan tanda kutip tunggal dan ganda dalam PHP?

796

Saya sedikit bingung mengapa saya melihat beberapa kode dalam PHP dengan string ditempatkan dalam tanda kutip tunggal dan kadang-kadang dalam tanda kutip ganda.

Saya hanya tahu dalam. NET, atau bahasa C, jika dalam kutipan tunggal, itu berarti karakter, bukan string.

merampok waminal
sumber

Jawaban:

1086

String PHP dapat ditentukan tidak hanya dalam dua cara, tetapi dalam empat cara.

  1. String yang dikutip tunggal akan menampilkan hal-hal yang hampir sepenuhnya "apa adanya". Variabel dan sebagian besar urutan pelarian tidak akan ditafsirkan. Pengecualian adalah bahwa untuk menampilkan kutipan tunggal secara literal, Anda dapat menghindarinya dengan garis miring\', dan untuk menampilkan garis miring, Anda dapat menghindarinya dengan garis miring terbalik yang lain\\( Jadi ya, bahkan satu string yang dikutip pun diuraikan ).
  2. String kutipan ganda akan menampilkan sejumlah karakter yang lolos (termasuk beberapa regex), dan variabel dalam string akan dievaluasi. Poin penting di sini adalah bahwa Anda dapat menggunakan kurung kurawal untuk mengisolasi nama variabel yang ingin Anda evaluasi . Misalnya katakanlah Anda memiliki variabel$typedan Anda inginecho "The $types are". Itu akan mencari variabel$types. Untuk menyiasati penggunaan ini,echo "The {$type}s are"Anda dapat meletakkan penjepit kiri sebelum atau setelah tanda dolar. Lihatlah parsing string untuk melihat bagaimana menggunakan variabel array dan semacamnya.
  3. Sintaks string Heredoc bekerja seperti string yang dikutip ganda. Dimulai dengan<<<. Setelah operator ini, pengidentifikasi disediakan, lalu baris baru. String itu sendiri mengikuti, dan kemudian pengidentifikasi yang sama lagi untuk menutup kutipan. Anda tidak perlu lepas dari kutipan dalam sintaks ini.
  4. Sintaks string Nowdoc (sejak PHP 5.3.0) bekerja pada dasarnya seperti string yang dikutip tunggal. Perbedaannya adalah bahwa tidak ada tanda kutip tunggal atau garis miring terbalik harus diloloskan. Nowdoc diidentifikasi dengan<<<urutan yangsama denganyang digunakan untuk heredocs, tetapi pengidentifikasi yang berikut dilampirkan dalam tanda kutip tunggal, misalnya<<<'EOT'. Tidak dilakukan penguraian di nowdoc.

Catatan: Kutipan tunggal di dalam tanda kutip tunggal dan tanda kutip ganda di dalam tanda kutip ganda harus diloloskan:

$string = 'He said "What\'s up?"';
$string = "He said \"What's up?\"";

Kecepatan:
Saya tidak akan terlalu menekankan pada tanda kutip tunggal karena lebih cepat daripada tanda kutip ganda. Mereka mungkin lebih cepat dalam situasi tertentu. Inilah artikel yang menjelaskan satu cara di mana tanda kutip tunggal dan ganda pada dasarnya sama cepatnya sejak PHP 4.3 ( Useless Optimizationsmenuju bagian bawah, bagian C). Juga, halaman tolok ukur ini memiliki perbandingan penawaran tunggal vs ganda. Sebagian besar perbandingannya sama. Ada satu perbandingan di mana tanda kutip ganda lebih lambat dari tanda kutip tunggal.

Peter Ajtai
sumber
17
+1 untuk trik kurung kurawal. Tidak menyadarinya. Sayang sekali ia tidak mengikuti konvensi yang sama dengan skrip shell, yaitu ${variablename}.
devios1
6
Saya hanya menggunakan tanda kutip ganda, ketika saya membutuhkannya \n, apa pun dalam PHPkode saya adalah dalam tanda kutip tunggal.
Jo Smo
tampaknya 'heredoc' porting ke PHP dari bash atau bukan? Anyways jawaban yang bagus, jadi +1 Terima kasih.
sjsam
2
Catatan menarik dalam komentar dokumentasi PHP: php.net/manual/en/language.types.string.php#120160 - "String yang dikutip ganda" yang terlihat sangat lambat karena harus mengurai semuanya untuk \ backslash dan $ dollar tanda untuk melakukan ekspansi variabel ", ternyata menjadi metode penggabungan string TERCEPAT di PHP - PERIODE! Kutipan tunggal hanya lebih cepat jika string Anda benar-benar literal (dengan tidak ada yang diuraikan di dalamnya dan tidak ada yang digabungkan), tetapi marginnya adalah sangat kecil dan tidak masalah. "
dregad
1
Catatan: lambatnya "penawaran ganda adalah sesuatu dari masa lalu. Pembaruan telah meningkatkan pemrosesan tanda kutip ganda menjadi lebih cepat, dalam semua kasus ekstrim, hari ini.
SherylHohman
211

Hal-hal dievaluasi dalam tanda kutip ganda tetapi tidak secara tunggal:

$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.
Dani
sumber
1
Kutipan tunggal yang lolos dan backslash yang lolos diperluas bahkan dalam string tunggal yang dikutip.
Peter Ajtai
43
Sebuah kesalahan yang dijalankan oleh banyak pengembang baru untuk PHP: $mailbody = 'I want a line break:\nDone.';adalah menjaga yang \nhidup. Sedangkan: $mailbody = "I want a line break:\nDone.";akan menguraikan garis istirahat.
Kai Noack
Dua sen saya hanya diperlukan untuk wawancara atau untuk pengembangan malware. Bandingkan saja var_dump () dari dua ekspresi: $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}!'; Urutan karakter dalam $testWithAsciiAndUtf8Charactersdiubah menjadi string dengan huruf nyata.
Rostyslav Pylypenko
56

' Dikutip tunggal

Cara termudah untuk menentukan string adalah dengan melampirkannya dalam tanda kutip tunggal. Kutipan tunggal umumnya lebih cepat, dan segala sesuatu yang dikutip di dalamnya diperlakukan sebagai string biasa.

Contoh:

echo 'Start with a simple string';
echo 'String\'s apostrophe';
echo 'String with a php variable'.$name;

" Kutipan ganda

Gunakan tanda kutip ganda dalam PHP untuk menghindari penggunaan periode untuk memisahkan kode (Catatan: Gunakan kurung kurawal {}untuk memasukkan variabel jika Anda tidak ingin menggunakan .operator gabungan ( ) dalam string.

Contoh:

echo "Start with a simple string";
echo "String's apostrophe";
echo "String with a php variable {$name}";

Apakah ada manfaat kinerja kutipan tunggal vs kutipan ganda di PHP?

Iya. Sedikit lebih cepat untuk menggunakan tanda kutip tunggal.

PHP tidak akan menggunakan pemrosesan tambahan untuk menafsirkan apa yang ada di dalam kutipan tunggal. ketika Anda menggunakan tanda kutip ganda PHP harus mengurai untuk memeriksa apakah ada variabel dalam string.

Janak Kanani
sumber
Satu- satunya pengecualian untuk tanda kutip tunggal TIDAK mem-parsing apa pun dalam string, adalah apa yang dapat Anda gunakan \'untuk keluar dari tanda kutip tunggal untuk digunakan dalam string (atau \\'untuk menampilkan backslash). Perhatikan bahwa urutan pelarian tradisional, seperti \nTIDAK akan diuraikan ke karakter baris baru. Dokumentasi PHP tentang string
SherylHohman
Saya melihat pada semua jawaban bahwa: Anda dapat menggunakan nama variabel di dalam tanda kutip ganda untuk mencetak nilai variabel, tetapi Anda mengatakan, nama variabel juga harus dimasukkan dalam kurung kurawal untuk menghindari perlunya menggunakan penggabung Titik. Jadi jika "$ my_var" dan "{$ my_var}" menghasilkan nilai $ my_var, untuk apa kawat gigi itu? Terima kasih!
Bahman.
40

String yang dikutip tunggal tidak memiliki variabel di dalamnya yang ditafsirkan. String yang dikutip ganda tidak.

Juga, string yang dikutip ganda dapat berisi apostrof tanpa garis miring terbalik, sedangkan string yang dikutip tunggal dapat berisi tanda kutip yang tidak terhapus.

String yang dikutip tunggal lebih cepat saat runtime karena mereka tidak perlu diuraikan.

Borealid
sumber
8
String yang dikutip tunggal juga menggunakan lebih sedikit memori. Cara tercepat untuk menangani string dalam PHP adalah dengan tanda kutip tunggal dan menggunakan. operator untuk menyatukan string dan variabel.
RibaldEddie
hmmm, koreksi saya jika saya salah tetapi bahasa dasar untuk PHP adalah C benar? Lalu mengapa kutipan string berbeda dalam PHP dan C?
merampok waminal
1
@rob waminal: PHP dapat diimplementasikan dalam C, tetapi bahasa yang berbeda. Bahasa PHP menentukan semantik ini.
Borealid
@Ribald - Bukankah sekarangdoc sintaks lebih cepat? String yang dikutip tunggal diuraikan untuk menghindari tanda kutip tunggal dan backslash.
Peter Ajtai
@ Peter, Anda mungkin benar, saya tidak pernah repot-repot untuk benar-benar menggali. Dokumentasi PHP membuat klaim kecepatan, saya memutuskan untuk percaya pada dokumen tentang iman. :)
RibaldEddie
27

Dalam PHP, keduanya 'my name'dan "my name"adalah string. Anda dapat membacanya lebih lanjut di manual PHP .

Hal yang harus Anda ketahui adalah

$a = 'name';
$b = "my $a"; == 'my name'
$c = 'my $a'; != 'my name'

Dalam PHP, orang menggunakan kutip tunggal untuk mendefinisikan string konstan, seperti 'a', 'my name', 'abc xyz', saat menggunakan kutip ganda untuk mendefinisikan string mengandung identifier seperti "a $b $c $d".

Dan hal lainnya adalah,

echo 'my name';

lebih cepat dari

echo "my name";

tapi

echo 'my ' . $a;

lebih lambat dari

echo "my $a";

Ini berlaku untuk string lain yang digunakan.

Bang Dao
sumber
18

Contoh kutipan tunggal, ganda, heredoc, dan sekarang

<?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;

?>
Rabindra Nath
sumber
16

Dalam PHP, teks kutipan tunggal dianggap sebagai nilai string dan teks kutipan ganda akan menguraikan variabel dengan mengganti dan memproses nilainya.

$test = "variable";
echo "Hello Mr $test"; // the output would be: Hello Mr variable
echo 'Hello Mr $test'; // the output would be: Hello Mr $test

Di sini, kutipan ganda menguraikan nilai dan kutipan tunggal dianggap sebagai nilai string (tanpa menguraikan $testvariabel.)

Maulik Bhojani
sumber
12

Kedua jenis karakter terlampir adalah string. Satu jenis kutipan mudah digunakan untuk melampirkan jenis kutipan lainnya. "'" dan '"'. Perbedaan terbesar antara jenis-jenis kutipan adalah bahwa referensi pengidentifikasi terlampir diganti untuk di dalam tanda kutip ganda, tetapi tidak di dalam tanda kutip tunggal.

wallyk
sumber
3

Perbedaan antara menggunakan tanda kutip tunggal dan tanda kutip ganda dalam php adalah bahwa jika kita menggunakan tanda kutip tunggal dalam pernyataan gema maka itu diperlakukan sebagai string. ... tetapi jika kita memasukkan nama variabel dalam tanda kutip ganda maka itu akan menampilkan nilai variabel itu bersama dengan string.

Hamza
sumber
0

Di sini beberapa kemungkinan kutip tunggal dan ganda dengan variabel

$world = "world";

"Hello '.$world.' ";

'hello ".$world."';
vampir remaja
sumber
-1

Satu hal:

Sangat penting untuk dicatat bahwa garis dengan pengenal penutup Heredoc tidak boleh mengandung karakter lain, kecuali tanda titik koma (;) . Itu berarti terutama bahwa pengidentifikasi mungkin tidak indentasi , dan mungkin tidak ada spasi atau tab sebelum atau setelah titik koma.

Contoh:

   $str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
srmilon
sumber
1
Ini adalah pernyataan yang benar, tetapi tidak ada hubungannya dengan pertanyaan di sini.
miken32
-1

Mungkin saya sedikit terlambat, dan sedikit di luar topik, tapi ini dia:

Anda tidak perlu harus memilih karena konten string Anda antara:
alert("It's \"game\" time.");ataualert('It\'s "game" time.');

Jika Anda terbiasa dengan penggunaan tanda kutip bahasa Inggris, dan karakter yang tepat untuk tanda kutip, Anda dapat menggunakan tanda kutip ganda atau tunggal, karena itu tidak masalah lagi:
alert("It’s “game” time.");danalert('It’s “game” time.');

Takit Isy
sumber