Saya telah menemukan tag PHP ini <?= ?>
baru-baru ini dan saya enggan menggunakannya, tetapi sangat gatal sehingga saya ingin Anda menerimanya. Aku tahu itu adalah praktik buruk untuk menggunakan tag pendek <? ?>
dan bahwa kita harus menggunakan tag penuh <?php ?>
sebaliknya, tapi bagaimana satu ini: <?= ?>
?
Ini akan menghemat pengetikan dan akan lebih baik untuk keterbacaan kode, IMO. Jadi alih-alih ini:
<input name="someVar" value="<?php echo $someVar; ?>">
Saya bisa menulis seperti ini, yang lebih bersih:
<input name="someVar" value="<?= $someVar ?>">
Apakah menggunakan operator ini disukai?
echo
mengarah sangat mudah ke XSS, dan Anda harus lebih bergantung pada metode gema konteks khusus (yaitu: memilikifunction html($x) { echo htmlentities($x,...); }
danhtml($someVar);
bukan sebagai gantinyaecho $someVar
atau menggunakanecho json_encode($x);
untuk konteks JS). Ini kemudian membuat<?=
tag menjadi praktik yang buruk karena itu berarti Anda telah melepaskan HTML dari konten variabel di tempat lain, dan agar tempat lain secara ajaib tahu bahwa variabel ini harus di-HTML-kan karena itu digema dalam konteks HTML.Jawaban:
Sejarah
Sebelum kereta informasi yang keliru keluar terlalu jauh dari stasiun, ada banyak hal yang perlu Anda pahami tentang tag pendek PHP.
Masalah utama dengan tag pendek PHP adalah bahwa PHP berhasil memilih tag (
<?
) yang digunakan oleh sintaks lain, XML .Dengan opsi yang diaktifkan, Anda tidak dapat membuat output mentah dari deklarasi xml tanpa mendapatkan kesalahan sintaksis:
Ini adalah masalah besar ketika Anda mempertimbangkan seberapa umum penguraian dan manajemen XML.
Bagaimana dengan
<?=
?Meskipun
<?
menyebabkan konflik dengan xml,<?=
tidak . Sayangnya, opsi untuk mengaktifkan dan menonaktifkannya terkaitshort_open_tag
, yang berarti bahwa untuk mendapatkan manfaat dari tag gema pendek (<?=
), Anda harus berurusan dengan masalah tag buka pendek (<?
). Masalah yang terkait dengan tag terbuka pendek jauh lebih besar daripada manfaat dari tag gema pendek, sehingga Anda akan menemukan sejuta setengah rekomendasi untukshort_open_tag
dimatikan, yang seharusnya Anda lakukan .Dengan PHP 5.4, namun tag gema pendek telah diaktifkan kembali terpisah dari
short_open_tag
opsi. Saya melihat ini sebagai dukungan langsung dari kenyamanan<?=
, karena tidak ada yang salah dengan itu.Masalahnya adalah Anda tidak dapat menjamin bahwa Anda akan memilikinya
<?=
jika Anda mencoba menulis kode yang dapat bekerja dalam versi PHP yang lebih luas.ok, jadi sekarang itu semua keluar dari jalan
Haruskah Anda gunakan
<?=
?sumber
<?=
di masa depan Anda dapat memperbaikinya dalam waktu kurang dari satu menit, tidak peduli berapa banyak ribuan file yang menggunakannya, Anda hanya perlu mencari & mengganti<?=
untuk seluruh proyek<?php echo
. Jawaban saya adalah jangan khawatir dan gunakan saja , manfaatnya melebihi konsekuensinya.<?=
tidak dianggap sebagai tag pendek lagi, Rasmus Lerdorf sendiri membuat itu sangat berkomitmen.<?=
akan selalu aktif ( stackoverflow.com/a/6064813/156257 ) dan sebagian besar waktu mereka dihidupkan. Anda dapat membuktikan saya salah dengan memeriksa dengan host Anda jika: mereka dinonaktifkan dan menggunakan PHP <5.3 dan jika mereka tidak mengizinkan pengaturan untuk ditimpa oleh pengguna atau atas permintaan khusus; jika semua yang sebelumnya salah, berarti khawatir<?=
.<?=
akan dihapus, dan saya juga. Yang lain mungkin, dan jika mereka, mereka tidak harus menggunakan<?=
. Beberapa orang memiliki ketakutan irasional menggunakan fitur bahasa tertentu ( seperti meninggalkan tag penutup di php ).Membersihkan topi PHP saya
Saya pasti akan menyukai penggunaan
<?= $someVar ?>
lebih dari yang lebih bertele-teleecho
(hanya preferensi pribadi). Satu- satunya downside AFAIK adalah untuk pengguna yang menjalankan pre-5.4.0, dalam hal inishort_open_tag
harus diaktifkan di php.ini .Sekarang mengatakan itu, jika proyek Anda bukan OS, maka itu adalah titik diperdebatkan. Jika ya, saya akan mendokumentasikan fakta bahwa
short_open_tag
s harus diaktifkan, atau menggunakan solusi yang lebih portabel dari kedua solusi tersebut.sumber
<?=
tidak terpengaruh olehshort_open_tag
PHP 5.4,<?
tetap saja dan jika Anda terbiasa menggunakan tag formulir pendek, cukup mudah untuk melupakan apa yang didukung pada versi apa.<?=
sebagai "Saya menghasilkan variabel sekarang" untuk penggunaan gaya template, dan<?php
sebagai "Saya menjalankan banyak kode sekarang". Saya sarankan untuk tidak pernah menggunakan<?
, tapi itu baik<?=
dan<?php
baik-baik saja.Anda harus mencoba menghindari tag formulir pendek, apakah itu
<?
atau<?=
.Alasan teknis utama adalah portabilitas, Anda tidak pernah dapat memastikan bahwa tag formulir pendek akan bekerja untuk setiap pengaturan yang diberikan, karena mereka dapat dimatikan, cari
short_open_tag
petunjuknya. Tetapi Anda selalu dapat benar-benar yakin bahwa bentuk panjang akan bekerja di mana-mana.Itu juga kebiasaan buruk. Saya benar-benar tidak dapat memberi tahu Anda apa yang menurut Anda lebih mudah dibaca, tetapi saya tidak suka menggunakan keterbacaan kode sebagai alasan untuk menyelamatkan diri Anda dari beberapa penekanan tombol. Jika Anda khawatir tentang keterbacaan, Anda harus menggunakan mesin template, ini:
jauh lebih mudah dibaca dari kedua contoh Anda.
Terakhir, perlu dicatat bahwa tag formulir pendek tidak disarankan secara eksplisit oleh proyek PHP besar, misalnya PEAR dan Zend Framework .
sumber
<?php
danecho
bukannya<?
dan<?=
, apakah Anda menganggap itu sebagai waktu yang serius? Dan apa yang terjadi ketika Anda memindahkan proyek Anda ke server di mana karena alasan tertentu tag pendek dinonaktifkan?The PHP-Dokumentasi jelas mengatakan bahwa Anda dapat menggunakan tag gema pendek dengan aman:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Meskipun ini untuk PHP versi 5.4 dan lebih besar tetapi semua orang setidaknya harus menggunakan yang ini. Saya lebih suka mereka untuk tujuan templating saja.
sumber
Alasan menggunakan tag pendek:
Alasan tidak menggunakan tag pendek:
sumber
Saya pikir
<?=
versi ini adalah praktik yang baik / dapat diterima, asalkan Anda hanya menggunakannya untuk hasil akhir variabel dan menghindari panggilan fungsi atau logika ternary yang tidak terkait langsung dengan penyajian data.Ini tentu jauh lebih baik daripada di
<? echo($x); ?>
mana - mana.Jangka panjang, Anda mungkin ingin melihat ke mesin templating seperti Smarty .
sumber
Pada PHP 7.4, lapangan bermain berubah sedikit:
<? ?>
secara resmi tidak digunakan lagi dan akan dihapus dalam PHP 8.0.PHP RFC: Turunkan PHP Tag terbuka pendek secara eksplisit menyatakan bahwa
<?= ?>
tidak terpengaruh. Ini akan menunjukkan (menurut saya, bukan RFC) bahwa penggunaannya tidak dianjurkan.sumber
Sejujurnya, saya berpikir bahwa menggemakan hasil yang mana pun metodenya (mode lama atau baru) adalah sesuatu yang cukup usang sementara MVC merayakan 33 tahun sudah.
Saya akan mengatakan bahwa ya, ini adalah praktik yang baik untuk merangkum data server masuk (php) dalam dokumen XML dan memprosesnya di lapisan aplikasi / klien Anda, dengan demikian, menghemat Anda bahkan gagasan untuk menggunakan tag seperti itu.
sumber