Php tanda kutip tunggal dan ganda. Perbedaan tanda kutip ganda dan tunggal di PHP. Contoh #3 Contoh definisi string di sini

Seperti yang Anda lihat di tutorial sebelumnya, perintah echo di php adalah sarana untuk mengeluarkan teks. Sepanjang karir PHP Anda, Anda akan menggunakan perintah echo lebih dari yang lain. Jadi mari kita lihat baik-baik!

Keluaran garis

Untuk mengeluarkan string, seperti yang kita lakukan pada pelajaran sebelumnya, echo digunakan. Dengan bantuannya, Anda dapat menampilkan teks dalam tanda kutip, nilai variabel, dll. Mari kita lihat sebuah contoh.

Saya suka menggunakan PHP!"; ?>

Mengeluarkan kalimat “Halo!” Kita sudah familiar, tidak ada yang baru disini. Tapi perintah echo berikutnya, seperti yang Anda lihat, berisi tag html. Tidak dilarang menggunakan tag html, karena php memberi kita dinamika, dan statika serta desain halaman masih bergantung pada html biasa.

Hati-hati, tanda kutip ganda!

Sangat keren bahwa Anda dapat menampilkan HTML di dalam PHP. Namun, Anda harus berhati-hati saat menggunakan kode HTML atau string lain yang mengandung tanda kutip! Echo menggunakan tanda kutip untuk menentukan awal dan akhir string, jadi Anda harus menggunakan salah satu opsi berikut jika ingin menggunakan tanda kutip di dalam echo:

  • Jangan gunakan tanda kutip di dalam string.
  • Hindari kutipan internal dengan garis miring. Untuk menghindari pemrosesan tanda kutip dalam, cukup beri tanda garis miring terbalik tepat sebelum tanda kutip tersebut, misalnya \".
  • Gunakan tanda kutip tunggal (apostrof) di dalam string.

Lihat contoh kami di bawah ini untuk penggunaan perintah echo yang benar dan salah:

Saya suka menggunakan PHP!"; // Oke karena kita lolos dari tanda kutip! echo "

Saya suka menggunakan PHP!
"; // Oke karena kita menggunakan tanda kutip " echo "
Saya suka menggunakan PHP!
"; ?>

Jika Anda ingin menghasilkan string yang berisi tanda kutip, gunakan tanda kutip (‘) atau hilangkan tanda kutip dengan menempatkan garis miring (\") di depannya. Garis miring terbalik akan memberi tahu PHP bahwa Anda ingin karakter setelahnya tidak diuraikan oleh penerjemah!

Keluaran variabel

Mendapatkan variabel sangat mudah. Sebenarnya Anda tidak perlu melakukan sesuatu yang khusus untuk menampilkan variabel di PHP. Dia bisa melakukannya sendiri. Berikut ini contoh untuk membantu Anda memahami semuanya:

Hasil:

Halo Bob. Nama saya: 4a

Output variabel dan string teks secara bersamaan

Anda juga dapat menampilkan variabel dalam tanda kutip ganda (misalnya, "teks teks $variabel"). Dengan meletakkan variabel di dalam tanda kutip ("") Anda memberi tahu PHP bahwa Anda ingin variabel tersebut mengambil nilainya, mengubahnya menjadi tipe string, dan mengeluarkannya. Contoh di bawah ini menunjukkan cara melakukan trik ini dengan benar :)

"; echo "Hai, saya Bob. Siapa kamu? $my_string
"; echo "Hai, saya Bob. Siapa kamu? $my_string Bobetta"; ?>

Hasil:

Halo Bob. Nama saya: Bobetta Hai, saya Bob. Siapa kamu? Halo Bob. Nama saya: Hai, saya Bob. Siapa kamu? Halo Bob. Nama saya: Bobetta

Menempatkan variabel di dalam baris dapat menghemat waktu dan membuat kode Anda lebih mudah dibaca, namun perlu beberapa waktu untuk membiasakan diri. Ingatlah untuk menggunakan tanda kutip, tanda kutip tunggal tidak akan menampilkan nilai variabel. Tanda kutip tunggal hanya akan mencetak nama variabel menjadi string, mis. $my_string, bukan "Halo Bob. Namaku adalah."

Gema bukanlah sebuah fitur!

Gema bukanlah sebuah fungsi, melainkan sebuah konstruksi bahasa. Saat menggunakan fungsi di PHP, mereka memiliki bentuk yang sangat spesifik, yang pasti akan kita bahas nanti. Untuk saat ini, ketahuilah bahwa echo adalah alat khusus yang pasti Anda sukai! :D

Penggabungan string PHP

Mungkin operasi string yang paling umum adalah penggabungannya, atau menggabungkan satu string ke string lainnya. Untuk menggabungkan string, operator khusus “.” diperkenalkan. (dot).

Contoh:


Pada output kita mendapatkan keseluruhan baris: "Negara asalku luas!"

Nilai bertipe string adalah string teks (disingkat string). String adalah urutan nol atau lebih karakter. Karakter meliputi huruf, angka, tanda baca, karakter khusus, dan spasi.

Sebuah string dapat didefinisikan dalam empat cara berbeda:

  • tanda kutip ganda
  • kutipan tunggal
  • sintaks heredoc
  • sintaksis nowdoc

String dalam tanda kutip ganda

String dalam tanda kutip ganda:

Anda dapat menggunakan urutan escape dalam string yang diberi tanda kutip ganda. Urutan kontrol— ini adalah karakter khusus yang dirancang untuk memformat keluaran teks. Urutan escape berikut tersedia di PHP:

Properti utama dari string yang dikutip ganda adalah kemampuan untuk menangani variabel di dalam string.


Tanda dolar: \$";

String yang diapit tanda kutip ganda dapat berisi karakter tanda kutip tunggal:

Gema "Kutipan tunggal: "";

String dalam tanda kutip tunggal (apostrof)

String dalam tanda kutip tunggal:

$str = "Tali"; echo "Satu baris besar dapat dipecah menjadi beberapa baris kecil agar lebih mudah dibaca.";

Tidak seperti string yang dikutip ganda dan sintaksis heredoc, variabel dan urutan kontrol (dengan satu pengecualian) yang diapit oleh tanda kutip tunggal tidak diproses. Artinya, karakter tersebut akan ditafsirkan sebagai karakter string normal:

$angka = 10; echo "Nomor: $num
Tanda dolar: \$";

Untuk dapat menggunakan tanda kutip tunggal dalam string yang diapit tanda kutip tunggal, Anda harus menghindarinya menggunakan garis miring terbalik (\"). Jika Anda perlu menulis garis miring terbalik itu sendiri, Anda perlu menduplikasinya (\\):

Echo "Gunakan tanda kutip \"tunggal\" di dalam"; echo "Garis miring terbalik:\";

String yang diapit tanda kutip tunggal dapat berisi karakter tanda kutip ganda:

Gema "Kutipan ganda: "";

Sintaks Heredoc

Sintaks Heredoc adalah cara alternatif untuk menulis string.

String yang didefinisikan menggunakan sintaksis Heredoc berfungsi sama seperti string yang diapit tanda kutip ganda. Perbedaan antara Heredoc dan string tanda kutip ganda adalah dengan Heredoc tidak perlu keluar dari tanda kutip ganda.

Sintaks Heredoc dimulai dengan tiga karakter<<< , после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Lurus pengidentifikasi harus diikuti oleh baris baru; tidak boleh ada karakter lain selain baris baru setelah pengidentifikasi, jika tidak, kesalahan akan terjadi. Berikutnya adalah konten string itu sendiri. Setelah konten string, pada baris terpisah, pengidentifikasi penutup harus ditentukan (sama seperti setelahnya<<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

<<

Sintaks Nowdoc

Sintaks Nowdoc, seperti Heredoc, adalah cara alternatif untuk menulis string.

String yang didefinisikan menggunakan sintaks Nowdoc berfungsi sama seperti string dalam tanda kutip tunggal. Perbedaan antara Nowdoc dan string dengan tanda kutip tunggal adalah dengan Nowdoc tidak perlu keluar dari tanda kutip tunggal.

Sintaks Nowdoc mirip dengan Heredoc, satu-satunya perbedaan adalah bahwa pengidentifikasi pembuka harus diapit dalam tanda kutip tunggal:

$angka = 10; gema<<<"some_id" Число: $num some_id;

Menangani Variabel dalam String

Ada dua jenis sintaks untuk menangani variabel dalam string: sederhana Dan sulit.

Sintaks sederhana- ini adalah saat nama variabel ditunjukkan pada baris apa adanya.

Ketika penerjemah menemukan tanda dolar, ia mulai memeriksa secara berurutan apakah semua karakter berikutnya adalah karakter yang valid dalam nama variabel. Jadi, untuk membentuk nama variabel yang valid, ia mengambil karakter sebanyak mungkin:

$str = "Dunia!"; gema"Halo $str";

Sintaks yang kompleks- ini adalah saat nama variabel diapit kurung kurawal.

Karena, untuk memproses variabel dalam satu baris, penafsir menangkap karakter sebanyak mungkin, ada situasi ketika penafsir tidak dapat secara mandiri menentukan di mana nama variabel berakhir:

$sport1 = "akan"; $sport2 = "kaki"; echo "Saya suka $sport1ball dan $sport2ball";

Dalam hal ini, hasil yang diinginkan tidak akan tercapai karena penerjemah akan menganggap $sport1 sebagai bagian dari nama variabel $sport1bol, yang tidak ada.

Untuk memberi tahu interpreter secara eksplisit di mana nama variabel berakhir, Anda perlu mengapit nama variabel dalam kurung kurawal:

$sport1 = "akan"; $sport2 = "kaki"; echo "Saya suka ($sport1)bol dan ($sport2)bol.";

Tanda dolar dapat ditempatkan sebelum atau sesudah kurung kurawal:

$sport1 = "akan"; $sport2 = "kaki"; echo "Saya suka $(sport1)bol dan ($sport2)bol.";

Rangkaian

Concatenation adalah penggabungan dua string atau lebih menjadi satu string yang lebih besar. Penggabungan terjadi menggunakan operator penggabungan - . (dot). Saat menggabungkan, setiap baris berikutnya ditambahkan ke akhir baris sebelumnya:

Nilai jenis apa pun yang digabungkan dengan string akan dikonversi secara implisit menjadi string dan kemudian digabungkan:

"; echo "Nomor: " .1; ?>

Cara paling sederhana untuk mendefinisikan sebuah string adalah dengan mengapitnya dalam tanda kutip tunggal (simbolnya " ).

Untuk menggunakan tanda kutip tunggal di dalam string, hilangkan tanda kutip tersebut dengan garis miring terbalik ( \ ). \\ Jika Anda perlu menulis garis miring terbalik itu sendiri, duplikatlah ( ). Semua penggunaan garis miring terbalik lainnya akan ditafsirkan sebagai karakter normal: ini berarti jika Anda mencoba menggunakan rangkaian escape lainnya seperti \R atau

\N , mereka akan ditampilkan apa adanya, bukan dengan perilaku khusus apa pun.;

\N gema
"ini adalah string sederhana"
"Anda juga bisa menyisipkannya ke dalam garis
;

karakter baris baru seperti ini,
\N Ini baik-baik saja";

// Keluaran: Arnold pernah berkata: "Saya akan kembali" "Suatu hari Arnold berkata, 'Saya akan kembali.'';

Gema
"Apakah Anda menghapus C:\\*.*?"

// Keluaran: Apakah Anda menghapus C:\*.*?
\N "Ini tidak akan diperluas: \n baris baru";

// Output: variabel $expand dan $either tidak diperluas
\N "$expand dan $either variabel tidak diperluas";
?>

Kutipan ganda

Jika string diapit tanda kutip ganda ("), PHP mengenali lebih banyak escape sequence untuk karakter khusus:

Urutan Pelarian
Selanjutnya Arti
\R baris baru (LF atau 0x0A (10) di ASCII)
). pengangkutan kembali (CR atau 0x0D (13) di ASCII)
\T tab horizontal (HT atau 0x09 (9) di ASCII)
\v tab vertikal (VT atau 0x0B (11) di ASCII) (sejak PHP 5.2.5)
\e karakter escape (ESC atau 0x1B (27) di ASCII) (sejak PHP 5.4.4)
\F umpan halaman (FF atau 0x0C (12) di ASCII) (sejak PHP 5.2.5)
\\ garis miring terbalik
\$ tanda dolar
\" kutipan ganda
\{1,3} urutan karakter yang sesuai dengan ekspresi reguler karakter dalam sistem bilangan oktal
\x(1,2) urutan karakter yang sesuai dengan ekspresi reguler karakter dalam notasi heksadesimal

Seperti halnya string yang diapit tanda kutip tunggal, keluarnya karakter apa pun juga akan menampilkan garis miring terbalik itu sendiri. Sebelum PHP 5.1.1, garis miring terbalik masuk \($var) tidak dipublikasikan.

Ini dok

Cara ketiga untuk mendefinisikan string adalah dengan menggunakan sintaks heredoc: <<< . Setelah operator ini, Anda harus menentukan pengidentifikasi, lalu umpan baris. Setelah ini muncul baris itu sendiri, dan kemudian pengenal yang sama, menutup penyisipan.

Garis sebaiknya mulai dengan pengidentifikasi penutup, mis. itu harus muncul di kolom pertama baris. Selain itu, pengidentifikasi harus mengikuti aturan penamaan yang sama seperti semua tag lainnya di PHP: hanya berisi karakter alfanumerik dan garis bawah, dan tidak boleh dimulai dengan angka (garis bawah diperbolehkan).

Perhatian

Sangat penting untuk dicatat bahwa baris pengidentifikasi penutup tidak boleh berisi karakter lain kecuali titik koma ( ; ). Artinya id tidak boleh diindentasi dan tidak boleh ada spasi atau tab sebelum atau sesudah titik koma. Penting juga untuk dipahami bahwa karakter pertama sebelum pengidentifikasi penutup harus berupa karakter baris baru yang ditentukan oleh sistem operasi Anda. Misalnya, pada sistem UNIX, termasuk Mac OS X, ini \R. Setelah pengidentifikasi penutup, baris baru juga harus segera dimulai.

Jika aturan ini dilanggar dan pengidentifikasi penutup tidak "bersih", maka pengidentifikasi penutup dianggap hilang dan PHP akan terus mencarinya lebih lanjut. Jika dalam hal ini pengidentifikasi penutup yang benar tidak pernah ditemukan, maka akan menyebabkan kesalahan penguraian dengan nomor baris di akhir skrip.

Heredoc tidak dapat digunakan untuk menginisialisasi bidang kelas.

Mulai dari PHP 5.3, pembatasan ini hanya berlaku untuk dokumen heredoc yang berisi variabel.

Contoh #1 Contoh yang salah
kelas foo (<<publik $bar =
batang
}
?>

EOT;

Teks Heredoc berperilaku sama seperti string dalam tanda kutip ganda, tanpa memilikinya. Artinya, Anda tidak perlu melakukan escape pada tanda kutip di heredoc, namun Anda tetap dapat menggunakan rangkaian escape di atas.

Variabel diproses, namun Anda harus berhati-hati saat menggunakan variabel kompleks di dalam heredoc seperti saat bekerja dengan string.<<Contoh #2 Contoh mendefinisikan string heredoc
$str =
Contoh baris,
mencakup beberapa baris,

menggunakan sintaks heredoc.
{
EOD;
Kelas foo

var $foo;
{
var $bar ;
Fungsi foo()
}
}

$ini -> foo = "Foo" ;
$ini ->

$foo = foo baru();<<$nama = "Nama Saya" ; .
gema
Nama saya adalah "$nama". Saya mengetik $foo -> foo .
Sekarang saya menyimpulkan
( $foo -> bilah [ 1 ])
?>

Ini akan menampilkan huruf kapital "A": \x41

EOT;

Nama saya adalah "Nama Saya". Saya mengetik Foo. Sekarang, saya mengeluarkan Bar2. Ini akan menghasilkan huruf kapital "A": A

Sintaks heredoc juga dapat digunakan untuk meneruskan data melalui argumen fungsi:

Sejak versi 5.3.0, inisialisasi variabel statis dan properti/konstanta kelas dapat dilakukan menggunakan sintaks heredoc:
Contoh #4 Menggunakan heredoc untuk menginisialisasi variabel statis
{
// Variabel statis<<fungsi foo()
statis $bar =
}

Tidak ada apa pun di sini...
LABEL;
{
// Properti kelas/konstanta<<kelas foo
konstanta BAR =

Contoh penggunaan konstanta<<FOOBAR;
konstanta BAR =
}
?>

Publik $baz =

Contoh penggunaan lapangan

Pada PHP 5.3.0, Anda juga dapat mengapit pengidentifikasi Heredoc dengan tanda kutip ganda: Sekarang dok Nowdoc sama untuk string dengan tanda kutip tunggal seperti halnya heredoc untuk string dengan tanda kutip ganda. Nowdoc mirip dengan heredoc, tetapi di dalamnya

Nowdoc ditunjukkan dengan urutan yang sama <<< , yang digunakan di heredoc, tetapi pengenal berikut diapit tanda kutip tunggal, misalnya, <<<"EOT" .

Semua ketentuan yang berlaku untuk pengidentifikasi heredoc juga berlaku untuk nowdoc, terutama yang berlaku untuk pengidentifikasi penutup.

Variabel diproses, namun Anda harus berhati-hati saat menggunakan variabel kompleks di dalam heredoc seperti saat bekerja dengan string.<<<"EOD"
Contoh #6 Contoh Nowdoc
Contoh teks,
mencakup beberapa baris
mencakup beberapa baris,

menggunakan sintaks nowdoc.
LABEL;
{
/* Contoh yang lebih kompleks dengan variabel. */
publik $foo ;

var $foo;
{
var $bar ;
publik $bar ;
}
}

$ini -> foo = "Foo" ;
$ini ->

$foo = foo baru();<<<"EOT"
$ini -> bar = array("Bar1", "Bar2" , "Bar3" );
Nama saya adalah "$nama". Saya mencetak $foo->foo.
Sekarang saya mencetak ($foo->bar).
( $foo -> bilah [ 1 ])
?>

Ini seharusnya tidak menghasilkan huruf kapital "A": \x41

Hasil menjalankan contoh ini:

Nama saya adalah "$nama". Saya mencetak $foo->foo. Sekarang saya mencetak ($foo->bar). Ini seharusnya tidak menghasilkan huruf kapital "A": \x41:

Komentar

Berbeda dengan heredoc, nowdoc dapat digunakan dalam konteks apa pun dengan data statis. Contoh umum menginisialisasi bidang atau konstanta kelas:

Contoh #1 Contoh yang salah
kelas foo (<<<"EOT"
publik $bar =
( $foo -> bilah [ 1 ])
}
?>

Nama saya adalah "$nama". Saya mencetak $foo->foo. Sekarang saya mencetak ($foo->bar). Ini seharusnya tidak menghasilkan huruf kapital "A": \x41:

Contoh #7 Contoh penggunaan data statis

dukungan nowdoc telah ditambahkan di PHP 5.3.0.

Variabel Penanganan

Jika string ditentukan dalam tanda kutip ganda, atau menggunakan heredoc, variabel di dalamnya akan diproses. Ada dua jenis sintaksis: sederhana dan kompleks. Sintaks sederhana lebih mudah dan nyaman. Itu memungkinkan untuk memproses variabel, nilai array ( susunan) atau properti objek (

obyek

) dengan sedikit usaha.

Sintaks yang kompleks dapat diidentifikasi dengan tanda kurung kurawal yang mengelilingi ekspresi. $ Sintaks sederhana

Jika penerjemah menemukan tanda dolar (

), ini menangkap karakter sebanyak mungkin untuk membentuk nama variabel yang benar. Jika Anda ingin menentukan akhiran sebuah nama, sertakan nama variabel dalam kurung kurawal.
$jus = "apel" ;
echo "Dia minum $jus jus." . PHP_EOL;
// tidak berfungsi, "s" adalah karakter yang valid untuk nama variabel,
?>

Ini seharusnya tidak menghasilkan huruf kapital "A": \x41

// tapi variabel kita bernama $juice.

echo "Dia minum jus yang terbuat dari $jus." ; Ada dua jenis sintaksis: sederhana dan kompleks. Dia minum jus apel. Dia minum jus yang terbuat dari. susunan Elemen array ( ] ) atau properti objek (

).

Dalam indeks array ada tanda kurung siku penutup (

) menandai akhir dari definisi indeks.
Aturan yang sama berlaku untuk properti objek seperti halnya variabel sederhana.
echo "Dia minum jus $juices [ koolaid1 ]." . PHP_EOL;

orang kelas (
publik $john = "John Smith" ;
publik $jane = "Jane Smith" ;
publik $robert = "Robert Paulsen" ;

Publik $smith = "Smith" ;
}

$orang = orang baru();

echo "$orang -> john minum $jus [ 0 ] jus." . PHP_EOL;
echo " $people -> john lalu menyapa $people -> jane ." . PHP_EOL;
echo "$people -> istri john menyapa $people -> robert." .PHP_EOL;
echo " $people -> robert menyapa dua $people -> smiths ." ; // Tidak akan berhasil
?>

Ini seharusnya tidak menghasilkan huruf kapital "A": \x41

Dia minum jus apel. Dia minum jus jeruk. Dia minum jus ungu. John Smith minum jus apel. John Smith kemudian menyapa Jane Smith. Istri John Smith menyapa Robert Paulsen.

Untuk hal yang lebih kompleks, gunakan sintaksis yang kompleks.

Sintaks yang kompleks (keriting).

Disebut kompleks bukan karena sulit untuk dipahami, tetapi karena memungkinkan penggunaan ekspresi yang kompleks.

Variabel skalar, elemen array, atau properti objek apa pun yang dipetakan ke string dapat direpresentasikan dalam string menggunakan sintaks ini. { Dan } Tulis saja ekspresi dengan cara yang sama seperti yang Anda lakukan di luar baris, lalu gabungkan { . $ Sejak { tidak dapat di-escape, sintaks ini hanya akan dikenali ketika {\$ berikut secara langsung {$ . Menggunakan

untuk mencetak
.

Beberapa contoh ilustrasi:

// Tampilkan semua kesalahan
error_reporting(E_ALL);

$hebat = "hebat" ;
// Tidak berfungsi, keluaran: Ini (bagus)
echo "Ini ( $bagus )" ;

// Berfungsi, keluaran: Ini bagus
\N echo "Ini ( $bagus ) "; echo "Ini $(bagus) ";

// Berfungsi
“Kotak ini luas

// Berfungsi, keluaran: Ini bagus
( $persegi -> lebar ) 00 sentimeter." ;

// Berfungsi, kata kunci yang dikutip hanya berfungsi dengan sintaks kurung kurawal
echo "Ini berhasil: ( $arr [ "kunci" ]) ";
echo "Ini berhasil: ( $arr [ 4 ][ 3 ]) ";
// Ini tidak valid karena alasan yang sama seperti $foo di luar
\N // garis. Dengan kata lain, ini akan tetap berfungsi,// tetapi karena PHP mencari konstanta foo terlebih dahulu, hal ini akan menyebabkan

// tingkat kesalahan E_NOTICE (konstanta tidak terdefinisi).
"Ini salah:
( $arr [ foo ][ 3 ]) " ;

// Berfungsi. Saat menggunakan array multidimensi secara internal
// baris selalu menggunakan kurung kurawal

\N echo "Ini berhasil: ( $arr [ "foo" ][ 3 ]) ";// Berfungsi.

\N gema "Ini berhasil: ". $arr [ "foo" ][ 3 ];"Ini juga berfungsi:

\N ( $obj -> nilai [ 3 ]-> nama ) " ;($( getNama ())) ";

\N "Ini adalah nilai variabel berdasarkan nama yang \$object->getName() kembalikan:($( $objek -> getName ())) " ;

// Tidak berfungsi, keluaran: Inilah yang getName() kembalikan: (getName())
\N "Inilah yang getName() kembalikan: (getName())";
?>

Dimungkinkan juga untuk mengakses properti objek dalam string menggunakan sintaks ini.

Contoh #1 Contoh yang salah
var $bar = "Saya bar." ;
}

$ini -> foo = "Foo" ;
$bar = "batang" ;
$baz = array("foo" , "bar" , "baz" , "quux" );
echo " ( $foo -> $bar ) \n" ;
echo " ( $foo -> $baz [ 1 ]) \n" ;
?>

Ini seharusnya tidak menghasilkan huruf kapital "A": \x41

Aku Bar. Aku Bar.

Nama saya adalah "$nama". Saya mencetak $foo->foo. Sekarang saya mencetak ($foo->bar). Ini seharusnya tidak menghasilkan huruf kapital "A": \x41:

Fungsi, pemanggilan metode, variabel kelas statis, dan konstanta kelas bekerja secara internal {$} , dimulai dengan PHP 5. Namun, nilai yang diberikan akan diperlakukan sebagai nama variabel dalam konteks yang sama dengan baris yang mendefinisikannya. {} Menggunakan kurung kurawal tunggal (

untuk mencetak
.

) tidak akan berfungsi untuk mengakses nilai fungsi, metode, konstanta kelas, atau variabel kelas statis.
bir kelas (
const minuman ringan = "rootbeer" ;
}

publik statis $ale = "ipa" ;
$rootbeer = "A & W" ;

$ipa = "Alexander Keith\"s" ;
// Ini berhasil, outputnya: Saya ingin A & W

echo "Saya mau ($( bir :: minuman ringan )) \n" ;
// Ini juga bisa, keluarannya: Saya ingin milik Alexander Keith
?>

echo "Saya mau ($( bir :: $ale )) \n" ;

Mengakses dan mengubah karakter dalam string Karakter dalam string dapat digunakan dan dimodifikasi dengan menentukan offsetnya dari awal string, dimulai dari nol, dalam tanda kurung siku setelah string, misalnya $str . Dan Bayangkan string untuk tujuan ini sebagai array karakter..

Nama saya adalah "$nama". Saya mencetak $foo->foo. Sekarang saya mencetak ($foo->bar). Ini seharusnya tidak menghasilkan huruf kapital "A": \x41: Jika Anda perlu mendapatkan atau mengganti lebih dari 1 karakter, Anda dapat menggunakan fungsinya

Perhatian

substr() substr_replace() Karakter dalam string juga dapat diakses menggunakan kurung kurawal, misalnya $str(42) . substr_replace() Mencoba menulis ke offset di luar batas garis akan mengisi string dengan spasi hingga offset tersebut. Tipe non-integer akan diubah menjadi tipe integer.

Perhatian

Jenis offset yang salah akan menyebabkan kesalahan level

E_PEMBERITAHUAN

.
Menulis ke offset negatif akan menyebabkan kesalahan level
, dan ketika dibaca akan mengembalikan string kosong.

// Dapatkan karakter ketiga dari string
$ketiga = $str [ 2 ];

// Dapatkan karakter terakhir dari string
$str = "Ini masih ujian." ;
$terakhir = $str [ strlen ($str ) - 1 ];

// Mengubah karakter terakhir dari baris tersebut
$str = "Lihat ke laut" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

Mulai PHP 5.4, offset dalam string harus ditentukan sebagai bilangan bulat atau string yang berisi angka, jika tidak, peringatan akan dikeluarkan. Sebelumnya offset diberikan oleh string like "foo", tanpa peringatan diubah menjadi 0 .

Contoh #10 Perbedaan PHP 5.3 dan PHP 5.4

$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str["1.0"]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str["1x"]);
var_dump (isset($str [ "1x" ]));
?>

Hasil menjalankan contoh ini di PHP 5.3:

string(1) "b" bool(benar) string(1) "b" bool(benar) string(1) "a" bool(benar) string(1) "b" bool(benar)

Hasil menjalankan contoh ini di PHP 5.4:

string(1) "b" bool(true) Peringatan: string ilegal offset "1.0" di /tmp/t.php on line 7 string(1) "b" bool(false) Peringatan: string ilegal offset "x" di / tmp/t.php pada baris 9 string(1) "a" bool(salah) string(1) "b" bool(salah)

Nama saya adalah "$nama". Saya mencetak $foo->foo. Sekarang saya mencetak ($foo->bar). Ini seharusnya tidak menghasilkan huruf kapital "A": \x41:

Mencoba mengakses variabel tipe lain (tidak termasuk array atau objek yang mengimplementasikan antarmuka tertentu) menggunakan atau {} diam-diam akan kembali BATAL.

Nama saya adalah "$nama". Saya mencetak $foo->foo. Sekarang saya mencetak ($foo->bar). Ini seharusnya tidak menghasilkan huruf kapital "A": \x41:

PHP 5.5 menambahkan dukungan untuk mengakses karakter dalam string literal menggunakan sintaksis Semua penggunaan garis miring terbalik lainnya akan ditafsirkan sebagai karakter normal: ini berarti jika Anda mencoba menggunakan rangkaian escape lainnya seperti {} .

Ada banyak fungsi berguna untuk memodifikasi string.

Fungsi dasar dijelaskan di bagian fungsi string, dan untuk pencarian dan penggantian lanjutan, ekspresi reguler atau fungsi ekspresi reguler yang kompatibel dengan Perl.

Konversikan ke string

Nilainya dapat dikonversi menjadi string menggunakan cast (rangkaian), atau fungsi strval(). \N atau Dalam ekspresi yang memerlukan string, konversi terjadi secara otomatis. Ini terjadi ketika Anda menggunakan fungsi mencetak.

, atau ketika nilai suatu variabel dibandingkan dengan string. Membaca bagian Tipe dan Manipulasi Tipe di manual ini akan memperjelas hal berikut. Lihat juga tipe set() Array selalu dikonversi menjadi string Ada dua jenis sintaksis: sederhana dan kompleks."Susunan" \N Semua penggunaan garis miring terbalik lainnya akan ditafsirkan sebagai karakter normal: ini berarti jika Anda mencoba menggunakan rangkaian escape lainnya seperti Dalam ekspresi yang memerlukan string, konversi terjadi secara otomatis., sehingga Anda tidak dapat menampilkan isi array ( ), menggunakan untuk melihat apa isinya. Untuk melihat satu elemen, gunakan sesuatu seperti

gema $arr["foo"] . Lihat di bawah untuk tips tentang cara menampilkan/melihat semua konten.. susunan Jika Anda ingin menampilkan nilai bidang suatu objek ( ) untuk tujuan debugging, baca terus. Jika Anda ingin mendapatkan nama kelas dari objek yang diperlukan, gunakan dapatkan_kelas()

BATAL. Sejak PHP 5, metode __toString juga telah tersedia.

selalu dikonversi ke string kosong. Seperti yang Anda lihat di atas, mengonversi array, objek, atau sumber daya menjadi string secara langsung tidak memberikan informasi berguna apa pun tentang nilai itu sendiri selain tipenya. Dan Cara yang lebih baik untuk menampilkan nilai untuk debugging adalah dengan menggunakan fungsi.

cetak_r() var_dump() Sebagian besar nilai dalam PHP dapat dikonversi menjadi string untuk penyimpanan persisten. Metode ini disebut serialisasi dan dapat dilakukan dengan menggunakan fungsi tersebut

membuat serial()

. Selain itu, jika instalasi PHP Anda memiliki dukungan WDDX, serialisasi ke struktur XML juga dimungkinkan.

Mengubah string menjadi angka Jika string dikenali sebagai nilai numerik, nilai dan jenis yang dihasilkan ditentukan sebagai berikut. Jika string tidak mengandung karakter apa pun ".", "e", atau "E", dan nilai bilangan tersebut berada dalam batas bilangan bulat (didefinisikan PHP_INT_MAX), string akan dikenali sebagai bilangan bulat ( bilangan bulat).

).

Dalam semua kasus lainnya, ini dianggap sebagai bilangan floating point ( mengambang
Nilainya ditentukan oleh awal string. Jika baris dimulai dengan nilai numerik yang valid, nilai tersebut akan digunakan. Jika tidak maka nilainya akan menjadi 0 (nol). Nilai numerik yang valid adalah satu digit atau lebih (yang dapat berisi titik desimal), yang dapat diawali dengan tanda, diikuti dengan eksponen opsional. Eksponennya adalah "e" atau "E" diikuti oleh satu atau lebih digit. $foo = 1 + "10,5" ;
// $foo adalah pelampung (11.5)
$foo = 1 + "-1.3e3" ;
// $foo adalah pelampung (-1299) $foo = 1 + "bob-1.3e3" ; // $foo adalah bilangan bulat (1)
$foo = 1 + "bob3" ; // $foo adalah bilangan bulat (1) $foo = 1 + "10 Babi Kecil" ;
// $foo adalah bilangan bulat (11)
$foo = 4 + "10.2 Babi Kecil" ;
?>

// $foo adalah pelampung (14.2)

$foo = "10,0 babi " + 1 ; // $foo adalah mengambang (11)

$foo = "10.0 babi " + 1.0 ; // $foo adalah mengambang (11)
Untuk informasi selengkapnya tentang konversi ini, lihat bagian strtod(3) dalam dokumentasi Unix.
?>

Jangan berharap mendapatkan kode karakter dengan mengubahnya menjadi bilangan bulat (seperti yang dilakukan, misalnya, di C). Untuk mengonversi karakter ke kode ASCII dan sebaliknya, gunakan fungsi pesanan() Dan chr().

Detail implementasi tipe string

Jenis string ( rangkaian) di PHP diimplementasikan sebagai array byte dan integer yang berisi panjang buffer. Itu tidak berisi informasi apa pun tentang cara mengubah byte ini menjadi karakter, menyerahkan tugas ini kepada pemrogram. Tidak ada batasan pada isi string, misalnya byte dengan nilai 0 ("NUL" byte) dapat ditempatkan di mana saja (namun perlu diketahui bahwa beberapa fungsi, sebagaimana dinyatakan dalam manual ini, tidak "aman bagi biner", yaitu dapat meneruskan string ke perpustakaan yang mengabaikan data setelah NUL -byte).

Sifat tipe string ini menjelaskan mengapa PHP tidak memiliki tipe “byte” terpisah - string memainkan peran tersebut. Fungsi yang mengembalikan data non-teks—misalnya, aliran data arbitrer yang dibaca dari soket jaringan—masih mengembalikan string.

Mengingat fakta bahwa PHP tidak menentukan pengkodean spesifik untuk string, orang mungkin bertanya bagaimana literal string kemudian dikodekan. Misalnya saja garis "á" setara "\xE1"(ISO-8859-1), "\xC3\xA1"(UTF-8, normalisasi bentuk C), "\x61\xCC\x81"(UTF-8, normalisasi bentuk D) atau representasi lain yang mungkin? Jawabannya adalah string tersebut akan dikodekan seperti yang ditulis dalam file skrip. Jadi, jika skrip ditulis dalam pengkodean ISO-8859-1, maka string akan dikodekan dalam ISO-8859-1, dan seterusnya. Namun, aturan ini tidak berlaku ketika mode Zend Multibyte diaktifkan: dalam hal ini, skrip dapat ditulis dalam pengkodean apa pun (baik ditentukan secara eksplisit atau ditentukan secara otomatis), dan kemudian dikonversi ke pengkodean internal tertentu, yang selanjutnya akan digunakan untuk string literal.

Tentu saja, agar berguna, fungsi string harus membuat beberapa asumsi tentang pengkodean string. Sayangnya, di antara fungsi-fungsi PHP terdapat cukup banyak variasi pendekatan untuk masalah ini:

  • Beberapa fungsi mengasumsikan bahwa string dikodekan dalam beberapa pengkodean byte tunggal, namun mereka tidak perlu menafsirkan byte sebagai karakter tertentu agar berfungsi dengan benar. Karakter dalam string dapat digunakan dan dimodifikasi dengan menentukan offsetnya dari awal string, dimulai dari nol, dalam tanda kurung siku setelah string, misalnya $str ., Kategori ini mencakup, misalnya,, strpos() strlen() Dan strcmp()
  • . Cara berpikir lain tentang fungsi-fungsi ini adalah bahwa fungsi-fungsi tersebut beroperasi pada buffer memori, yaitu. mereka bekerja secara langsung dengan byte dan offsetnya.
  • offset. Fungsi lain mengharapkan pengkodean diteruskan sebagai parameter, mungkin dengan asumsi beberapa pengkodean default jika parameter dengan pengkodean tidak ditentukan. Fungsi ini adalah Terakhir, ada fungsi yang mengasumsikan bahwa string menggunakan pengkodean tertentu, biasanya UTF-8. Sebagian besar fungsi dari ekstensi intl dan PCRE ada di sini (dalam kasus terakhir, hanya ketika menentukan pengubah kamu). Meskipun ini dilakukan dengan sengaja, fungsinya utf8_decode() menyiratkan pengkodean UTF-8, dan

utf8_encode()

- ISO-8859-1.

Pada akhirnya, menulis program yang benar dan bekerja dengan Unicode berarti dengan hati-hati menghindari fungsi yang tidak bekerja dengan Unicode dan cenderung merusak data, dan sebagai gantinya menggunakan fungsi yang valid, biasanya dari ekstensi intl dan mbstring.

Namun, menggunakan fungsi berkemampuan Unicode adalah awal yang baik. Terlepas dari fitur yang disediakan suatu bahasa, spesifikasi Unicode itu sendiri perlu diketahui. Misalnya, jika suatu program berasumsi bahwa hanya ada huruf kecil dan besar dalam suatu bahasa, maka program tersebut membuat kesalahan besar.

Alasannya di sini sederhana: juru bahasa PHP juga memeriksa string dalam tanda kutip ganda untuk mengetahui keberadaan variabel, dan jika ditemukan, maka alih-alih nama variabel, nilainya dimasukkan ke dalam string. Tetapi baris yang diapit apostrof dianggap oleh penerjemah sebagai teks biasa dan PHP tidak melakukan transformasi apa pun pada baris ini. Saya pikir sudah jelas bahwa memproses string dalam tanda kutip tunggal akan lebih cepat.

Pertama, mari kita jelaskan cara mendefinisikan string, lalu periksa seberapa cepat pemrosesan string dalam tanda kutip tunggal.

Cara paling sederhana untuk mendefinisikan sebuah string adalah dengan mengapitnya dalam tanda kutip tunggal ("). Untuk menggunakan tanda kutip tunggal dalam string yang diberi tanda kutip tunggal, tanda kutip tersebut harus diawali dengan garis miring terbalik (\), yaitu escape. Jika garis miring terbalik harus muncul sebelum tanda kutip tunggal atau berada di akhir baris, Anda perlu menduplikasinya. Jika Anda mencoba keluar dari karakter lain, garis miring terbalik juga akan dicetak.

Berikut ini contoh penggunaan tanda kutip tunggal:
// Keluaran: String sederhana
echo "String sederhana";
// Cetakan: Saya di sini
echo "Saya di sini";
// Output: Ini tidak akan menyisipkan: \n baris baru
echo "Ini tidak akan menyisipkan:\nbaris baru";
// Keluaran: Variabel $example juga tidak akan diganti
echo "Variabel $example juga tidak akan diganti";

Jika sebuah string diapit oleh tanda kutip ganda ("), PHP mengenali lebih banyak rangkaian escape untuk karakter khusus dan juga mengganti nama variabel ke dalam string untuk nilainya. Sama seperti dengan tanda kutip tunggal, untuk menggunakan tanda kutip ganda dalam string yang diapit tanda kutip tanda kutip ganda, harus diawali dengan karakter garis miring terbalik (\).
// Keluaran: String sederhana
echo "String sederhana";
Berikut ini contoh penggunaan tanda kutip ganda:
// Keluaran: Perusahaan "Snowdrop"
echo "Perusahaan \" Tetesan Salju\"";
// Output: Ini akan menghasilkan baris baru
echo "Ini akan masuk ke baris baru \n";
// Output: Variabel akan diganti
$example = "akan diganti";

Mari kita cari tahu seberapa cepat tanda kutip tunggal dibandingkan tanda kutip ganda. Untuk pengukuran, kami akan menulis skrip pengujian singkat, dan kami akan segera mencatat bahwa jika Anda mengujinya sendiri, hasilnya akan berbeda, tergantung pada perangkat keras PC atau server Anda.
// Mengembalikan stempel waktu di awal perulangan
$mulai = waktu mikro(benar);
// Membuat loop untuk 1 juta iterasi
untuk ($i = 0; $i< 1000000; $i++) {
$text = "Ini adalah string karakter";
}
// Hitung waktu yang dihabiskan
$waktu = (waktu mikro(benar) - $mulai);

Hasil: 0,09 detik.
Jika kita mengganti tanda kutip tunggal dengan tanda kutip ganda:

$text = "Ini adalah string karakter";
Hasilnya adalah 0,10 detik.
Seperti yang Anda lihat, ketika menggunakan string teks, perbedaan waktu eksekusi sangat kecil, bahkan bisa dikatakan tidak ada sama sekali. Kegembiraan dimulai saat kita mencoba menggabungkan string dan variabel.

$text = "Ini adalah string karakter $i";

atau

$teks = $i."Ini adalah string karakter";

Hasil kira-kira: 0,27 detik.

Perbedaannya cukup mencolok. Penggabungan dan tanda kutip ganda jelas mempengaruhi kinerja ketika variabel ditambahkan ke string.

Oleh karena itu, jika kita perlu menampilkan teks “sebagaimana adanya”, kita menggunakan tanda kutip tunggal. Jika Anda perlu mengganti nilainya alih-alih variabel, gunakan nilai ganda (jika hanya ada satu variabel, Anda dapat menghilangkan tanda kutip sama sekali). Anda sering melihat kode seperti ini:

Hanya teks yang ditampilkan. Namun dalam kode, untuk beberapa alasan yang tidak diketahui, kode tersebut diapit tanda kutip ganda, yang memaksa penerjemah untuk menguraikannya untuk mengetahui adanya variabel. Mengapit teks dalam tanda kutip tunggal adalah benar.

Mari kita pertimbangkan tugas sepele menampilkan variabel sebagai bagian dari teks, termasuk menggunakan kode html.

$tanggal"; ?>

Semuanya ditampilkan dengan baik, teks dan tanggal disorot dalam huruf tebal, yang menggantikan variabel. Namun Anda perlu mengingat dua hal. Pertama, ini adalah fitur penerjemah: penggabungan string jauh lebih cepat dan memerlukan lebih sedikit sumber daya daripada penguraian string. Dan kedua, jangan lupa tentang paradigma pemrograman “memecah belah dan menaklukkan”. Tidak perlu mencampurkan semuanya menjadi satu; akan lebih tepat jika membagi teks menjadi dua bagian - bagian yang memerlukan dan bagian yang tidak memerlukan penguraian oleh penerjemah. Jadi contoh di atas seharusnya ditulis seperti ini:

".$tanggal.""; ?>

Tentu saja, Anda harus mengikuti aturan ini (melampirkan segala sesuatu yang tidak memerlukan penguraian dalam tanda kutip tunggal) tidak hanya saat menampilkan teks, tetapi juga saat memberikan nilai ke variabel string:

Atau, misalnya, saat menggunakan string saat meneruskan argumen fungsi:

Dan meskipun pada komputer modern, penambahan waktu untuk menafsirkan kode yang bergantung pada penggunaan tanda kutip tunggal atau ganda hampir tidak terlihat, terutama dalam skrip kecil, ada baiknya Anda membiasakan diri menulis kode yang kompeten dari awal, ini jauh lebih mudah daripada mempelajarinya kembali nanti.