Apakah tag pendek PHP dapat diterima untuk digunakan?

522

Berikut informasi menurut dokumentasi resmi :

Ada empat pasang tag pembuka dan penutup yang berbeda yang dapat digunakan dalam PHP. Dua di antaranya, <?php ?> dan <script language="php"> </script>, selalu tersedia. Dua lainnya adalah tag pendek dan tag gaya ASP, dan dapat dinyalakan dan dimatikan dari file konfigurasi php.ini. Karena itu, sementara beberapa orang menemukan tag pendek dan tag gaya ASP yang nyaman, mereka lebih mudah dibawa-bawa, dan umumnya tidak direkomendasikan .

Dalam pengalaman saya kebanyakan server yang memiliki tag pendek diaktifkan. Mengetik

<?=

jauh lebih nyaman daripada mengetik

<?php echo 

Kenyamanan programmer adalah faktor penting, jadi mengapa mereka tidak direkomendasikan?

MDCore
sumber
61
Untuk menjawab whybagian ini, saya akan mengutip panduan sertifikasi Zend PHP 5: "Tag pendek adalah, untuk sementara waktu, standar di dunia PHP; namun, mereka memiliki kelemahan utama berkonflik dengan header XML dan, oleh karena itu, memiliki sedikit jatuh di pinggir jalan. "
Fluffy
7
Apa gunanya di mana masalah itu muncul, apakah itu berarti menyakitkan bagi pengembang untuk menghasilkan XML menggunakan PHP?
Jon z
9
Katakanlah Anda memiliki dokumen XML yang Anda inginkan untuk publik, tetapi Anda ingin agar dokumen-dokumen itu menjadi parseable php untuk alasan apa pun sehingga Anda membuat parseable .xml oleh browser Anda. Anda menggunakan tag pendek sehingga diaktifkan, dan tiba-tiba dokumen XML diurai melalui header XML, memecahkan banyak hal. Drove saya gila mencoba mencari tahu ini sejak lama. Sejak kode pendek telah dinonaktifkan pada server mana pun yang saya jalankan dan tim mana pun yang pernah bekerja dengan saya harus menggunakan kode yang tidak pendek
thenetimp
43
Dari PHP 5.4.0 arahan short_open_tag tidak termasuk tag gema pendek <?= $example;?> ! Ini sangat penting karena penggunaan semua tag pendek lainnya dianggap sia-sia. Pokoknya penggunaan tag gema pendek dianjurkan mulai sekarang. Itu menyediakan basis kode yang lebih halus dan lebih rapi - esp. dalam file tampilan. Jadi untuk PHP> = 5.4.0 <?= ?> dapat digunakan tanpa pengaturan short_open_tag . Tolong jangan gunakan tag pendek lainnya dalam kode Anda. Dewa-kode menjadi sangat marah ketika Anda melakukannya ...
Borislav Sabev
6
Saya akan menambahkan ini sebagai komentar cepat, karena sudah ada terlalu banyak jawaban panjang: <?tidak hanya digunakan dalam XML untuk <?xml version="1.0" ?>deklarasi pembukaan ; ini adalah sintaks umum untuk "instruksi pemrosesan", contoh ke-2 yang paling umum <?xml-stylesheet ... ?>. <?phpsebenarnya dapat dianggap sebagai instruksi pemrosesan yang valid, sebagaimana dapat <?=(sebagaimana diizinkan dalam 5.4+), tetapi mengklaim keseluruhan <?juga menciptakan konflik yang tidak perlu antara sintaksis.
IMSoP

Jawaban:

374

Mereka tidak direkomendasikan karena ini adalah PITA jika Anda harus memindahkan kode ke server yang tidak didukung (dan Anda tidak dapat mengaktifkannya). Seperti yang Anda katakan, banyak host bersama melakukan dukungan shorttags tapi "banyak" adalah tidak semua dari mereka. Jika Anda ingin berbagi skrip, sebaiknya gunakan sintaks lengkap.

Saya setuju bahwa <?dan <?=lebih mudah pada programmer daripada <?phpdan <?php echotetapi mungkin untuk melakukan massal menemukan-dan-mengganti selama Anda menggunakan formulir yang sama setiap kali (dan jangan membuang spasi) (misalnya: <? phpatau <? =)

Saya tidak membeli keterbacaan sebagai alasan sama sekali. Kebanyakan pengembang yang serius memiliki opsi penyorotan sintaks yang tersedia untuk mereka.

Seperti yang disebutkan ThiefMaster dalam komentar, pada PHP 5.4, <?= ... ?>tag didukung di mana-mana, terlepas dari pengaturan shorttag . Ini berarti mereka aman untuk digunakan dalam kode portabel tetapi itu berarti ada ketergantungan pada PHP 5.4+. Jika Anda ingin mendukung pra-5.4 dan tidak dapat menjamin shorttag, Anda masih perlu menggunakannya <?php echo ... ?>.

Juga, Anda perlu tahu bahwa tag ASP <%,%>, <% =, dan tag skrip dihapus dari PHP 7 . Jadi, jika Anda ingin mendukung kode portabel jangka panjang dan ingin beralih ke alat paling modern, pertimbangkan untuk mengubah bagian kode itu.

Oli
sumber
91
Jadi, penjelasannya adalah: Mereka buruk karena tidak didukung? Tetapi mengapa mereka tidak didukung? Karena mereka bukan bagian dari spesifikasi? Ok, tapi mengapa mereka bukan bagian dari spesifikasi? Saya agak kecewa dengan jawaban ini.
Josef Sábl
61
Saya di sini bukan untuk membahas "pertanyaan besar" seperti mengapa kita di sini, bagaimana semuanya dimulai, dll. Dukungan shorttag tidak dijamin pada server bersama dan itu dihapus sepenuhnya versi utama berikutnya. Hanya itu yang perlu Anda ketahui.
Oli
39
PHP wajib adalah mesin templat. : P
Syntax Error
49
Tag pendek tidak sedang dihapus. Hanya tag pendek gaya ASP.
Brian Lacy
46
Dalam waktu dekat PHP 5.4, penggunaan <? = Akan dipisahkan dari apakah short_open_tags diaktifkan atau dinonaktifkan. <? = tidak dihapus, cukup sebaliknya itu sekarang dianggap sebagai bagian mendasar dari bahasa.
Tn. Griever
175

Saya terlalu suka <?=$whatever?>untuk membiarkannya. Tidak pernah punya masalah dengan itu. Saya akan menunggu sampai ia menggigit saya. Dalam semua keseriusan, 85% dari klien (saya) memiliki akses ke php.ini dalam kesempatan langka mereka dimatikan. 15% lainnya menggunakan penyedia hosting utama, dan hampir semuanya mengaktifkannya. Saya suka mereka.

Paolo Bergantino
sumber
41
@ B Seven Jika Anda mencoba menghindari setiap masalah teoretis yang mungkin muncul, kode Anda hampir pasti tidak efisien dan bermasalah. Sampai grup PHP setuju untuk mengeluarkan tag pendek [bukan tag ASP], kekhawatiran digigit jauh lebih sedikit, dan solusi potensial jauh lebih sederhana, daripada hal-hal lain yang dapat Anda habiskan untuk "memperbaiki".
SamGoody
18
jika itu menggigit Anda, pindahlah ke hosting yang lebih baik
Lie Ryan
4
Saya benar-benar tidak setuju untuk tidak menggunakan sesuatu karena mungkin tidak didukung. Haruskah kita tidak menggunakan salah satu fitur lain yang mungkin tidak didukung di server? MYSQL vs MYSQLI? Anda akan menghabiskan waktu Anda sedikit demi sedikit, berulang-ulang menulis tag panjang hanya untuk menghindari kemungkinan kecil menghabiskan sedikit waktu untuk berubah ke host yang lebih baik.
Dean Or
2
@ BSeven, Apakah maksud Anda Anda tidak menggunakan ekstensi PHP apa pun kecuali untuk ekstensi yang dikirimkan secara default?
Pacerier
143

Dimulai dengan PHP 5.4, pintasan gema adalah masalah yang terpisah dari tag pendek, karena pintasan gema akan selalu diaktifkan. Itu fakta sekarang:

Jadi pintasan gema itu sendiri ( <?=) aman untuk digunakan sekarang.

dukeofgaming
sumber
19
Saya akan mengatakan ini adalah satu-satunya "tag pendek" yang dibutuhkan. <?phpdapat digunakan di awal semua file kelas, dan kemudian Anda miliki <?=untuk tampilan Anda. menang-menang.
Xeoncross
6
So the echo shortcut itself (<?=) is safe to use... selama Anda merasa nyaman membutuhkan PHP 5.4. Aplikasi PHP yang didistribusikan secara luas (seperti wordpress) tidak memiliki kemewahan membutuhkan 5.4, dan bahkan terus menawarkan dukungan PHP 4 hingga 2011 - 7 tahun penuh setelah PHP 5 dirilis. Jika Anda berada di tempat seperti Facebook, di mana semua instalasi perangkat lunak Anda secara langsung dioperasikan oleh perusahaan itu sendiri, maka memerlukan dukungan 5,4 jauh lebih mudah daripada jika Anda mengerjakan proyek seperti wordpress.
Frank Farmer
@dukeofgaming, Wow tangkapan bagus, tidak tahu bahwa revisi SVN mereka dapat diakses di web.
Pacerier
82

Masalah dengan seluruh diskusi ini terletak pada penggunaan PHP sebagai bahasa templating. Tidak ada yang berpendapat bahwa tag harus digunakan dalam file sumber aplikasi.

Namun sintaksis PHP yang dapat disematkan memungkinkannya digunakan sebagai bahasa templat yang kuat, dan templat harus sesederhana dan semudah mungkin dibaca. Banyak yang merasa lebih mudah menggunakan mesin templating add-on yang jauh lebih lambat seperti Smarty, tetapi bagi mereka yang purist di antara kita yang menuntut rendering cepat dan basis kode murni, PHP adalah satu-satunya cara untuk menulis templat.

Argumen HANYA yang valid TERHADAP penggunaan tag pendek adalah bahwa tag tidak didukung di semua server. Komentar tentang konflik dengan dokumen XML itu menggelikan, karena Anda mungkin tidak seharusnya mencampurkan PHP dan XML; dan jika ya, Anda harus menggunakan PHP untuk menampilkan string teks. Keamanan seharusnya tidak pernah menjadi masalah, karena jika Anda memasukkan informasi sensitif seperti kredensial akses database di dalam file template, maka, Anda punya masalah yang lebih besar!

Nah, untuk masalah dukungan server, diakui kita harus menyadari platform target mereka. Jika kemungkinan shared hosting adalah target, maka tag pendek harus dihindari. Tetapi bagi banyak pengembang profesional (seperti saya), klien mengakui (dan memang, tergantung pada fakta) bahwa kami akan mendikte persyaratan server. Seringkali saya bertanggung jawab untuk menyiapkan server sendiri.

Dan kami TIDAK PERNAH bekerja dengan penyedia hosting yang tidak memberi kami kendali penuh atas konfigurasi server - dalam kasus seperti itu kami dapat mengandalkan untuk menjalankan lebih banyak masalah daripada hanya kehilangan dukungan tag pendek. Itu tidak terjadi.

Jadi ya - Saya setuju bahwa penggunaan tag pendek harus ditimbang dengan cermat. Tetapi saya juga sangat yakin bahwa itu harus SELALU menjadi pilihan, dan bahwa pengembang yang sadar akan lingkungannya harus merasa bebas untuk menggunakannya.

Brian Lacy
sumber
6
Jika, karena alasan tertentu, Anda memiliki apache yang diatur untuk meneruskan file .xml ke mod_php, hal <? Xml akan menjadi sakit kepala dengan tag pendek aktif. Tapi itu jelas pengaturan yang aneh.
Frank Farmer
3
Sebuah template bahasa yang tidak dapat tertanam tanpa workarounds dalam beberapa jenis dokumen output besar gagal. Satu-satunya alasan saya tidak boleh memiliki template XML dengan kode PHP dan tag pendek adalah karena tidak berfungsi, bukan karena itu tidak masuk akal.
Vinko Vrsalovic
8
Ini bukan "kegagalan besar" untuk mengambil keuntungan dari manfaat PHP sebagai bahasa templat yang cepat dan nyaman. Seperti yang saya katakan sebelumnya, ini adalah masalah menimbang manfaat dan kelemahan dan menulis kode dengan cara yang mengakomodasi pendekatan yang Anda pilih. Jangan mengabaikan pendekatan yang valid hanya karena itu tidak bekerja dalam satu skenario tertentu (yang dapat dengan mudah ditangani).
Brian Lacy
5
Saya tidak dengan tegas menolak pendekatan apa pun yang valid (lihat jawaban saya untuk pertanyaan itu.) Anda adalah orang yang dengan tegas menolak PHP dalam XML, saya kutip: "Anda seharusnya tidak mencampurkan PHP dan XML". Juga, kegagalan besar yang saya maksudkan adalah keputusan untuk menggunakan <?sebagai tag pendek, karena itu mengarah pada solusi buruk pada XML. Yang mengatakan, saya setuju bahwa ini adalah masalah menimbang manfaat dan kelemahan, dan bahwa jika Anda tahu apa yang Anda lakukan, Anda pasti bisa melakukannya. Tapi ini bukan <?pilihan yang baik.
Vinko Vrsalovic
3
Saya sedikit terlambat ke pesta, tetapi saya sangat suka jawaban ini, dan itu mencerminkan pengalaman saya dengan situasi tersebut. Sementara kami memiliki beberapa ketidaksepakatan tentang masalah di kantor kami, saya dapat mengatakan bahwa dengan pekerjaan harian hampir di php selama bertahun-tahun, saya tidak pernah mengalami masalah ini. Ketika PHP digunakan untuk menghasilkan XML, itu dalam pengalaman saya selalu dalam konteks konten yang sangat dinamis, yang tidak pernah langsung dicampurkan melalui PHP, jadi masalahnya tidak pernah muncul.
redreinard
33

Tag pendek muncul kembali berkat Zend Framework yang mendorong " PHP sebagai bahasa templat " dalam konfigurasi MVC default mereka . Saya tidak mengerti apa perdebatannya, sebagian besar perangkat lunak yang akan Anda hasilkan selama hidup Anda akan beroperasi pada server yang Anda atau perusahaan Anda akan kendalikan. Selama Anda tetap konsisten, seharusnya tidak ada masalah.

MEMPERBARUI

Setelah melakukan sedikit kerja dengan Magento , yang menggunakan bentuk panjang. Akibatnya, saya beralih ke bentuk panjang:

<?php and <?php echo

lebih

<? and <?=

Sepertinya sejumlah kecil pekerjaan untuk memastikan interoperabilitas.

Jake McGraw
sumber
8
Saya lepas dan semua kode saya masuk ke shared hosting, jadi tidak ada kontrol sama sekali! :)
MDCore
12
Jika Anda memiliki cukup banyak klien yang pindah ke coloc Anda sendiri, hosting bersama tidak aman dan tidak stabil.
Jake McGraw
2
Tag pendek yang dibawa kembali oleh Zend tampaknya tidak menangkap karena Zend menggunakan versi panjang: framework.zend.com/manual/en/zend.view.scripts.html
Gerry
3
@Gerry Saya juga telah membaca ini baru-baru ini, lihat komentar terakhir di utas ini: Perbarui .htaccess untuk mengaktifkan tag buka pendek
MrWhite
2
Anda harus benar-benar memperbaiki tata bahasa pada kalimat pertama setelah UPDATE, yang tidak masuk akal dalam bentuknya saat ini.
redreinard
22

Karena kebingungan itu dapat menghasilkan dengan deklarasi XML. Namun, banyak orang setuju dengan Anda.

Kekhawatiran tambahan adalah rasa sakit yang dihasilkannya untuk mengkodekan segala sesuatu dengan tag pendek hanya untuk mengetahui pada akhirnya bahwa server hosting terakhir dimatikan ...

Vinko Vrsalovic
sumber
Bukankah deklarasi XML akan menyebabkan kebingungan jika short_tags aktif?
MDCore
Jadi, alih-alih langsung mengeluarkan deklarasi XML, Anda memiliki PHP yang menggaungkannya. Ini sebenarnya bukan sanggahan yang bagus.
moo
Itu bukan sanggahan dari apa pun. Ini satu-satunya alasan aktual yang pada gilirannya adalah penyebab untuk alasan lain "hoster mematikannya", tentu saja Anda dapat menggunakannya jika Anda tahu apa yang Anda lakukan, seperti biasa.
Vinko Vrsalovic
1
@ Macek: Saya tahu itu. Itu hanya contoh pertama yang saya pikirkan. Lain, bagaimana jika Anda menanamkan PHP dalam file XML? Anda tidak dapat melakukannya secara langsung. Dan jangan katakan solusi untuk masalah itu juga, saya tahu mereka. Intinya adalah bahwa ada banyak cara bagi PHP untuk mem-parsing file XML. Anda mungkin dapat mengabaikan mereka semua dengan solusi ( <?='<?xml') atau dengan mengatakan "Anda tidak harus melakukan itu" tetapi itu tidak membuat fakta bahwa itu bisa terjadi menghilang.
Vinko Vrsalovic
1
bagaimana tag pendek menyebalkan jika tidak berhasil? adalah sangat mudah dilakukan massal dan mengganti <?=dengan <? echo . banyak editor teks dapat dengan mudah menangani hal ini ke ribuan file sekaligus.
Yamiko
20

Berikut ini adalah diagram alir luar biasa yang sama:

pohon pengambilan keputusan penggunaan <? =

Sumber: pertanyaan serupa tentang Rekayasa Perangkat Lunak Stack Exchange

Sumoanand
sumber
2
Ini menggambarkan apakah akan menggunakan tag gema pendek, tidak sama dengan <?tag pendek yang disebutkan dalam pertanyaan (meskipun menggunakan pengaturan konfigurasi yang sama pra-5.4)
Alok
Sebenarnya ini harus menjadi jawaban yang dapat dipahami semua orang, meskipun keadaannya tidak benar-benar dijelaskan mengapa Anda tidak ingin menggunakan tag pendek dalam banyak kasus (mis. Tidak dapat mengubah file php.ini pada sistem hosting bersama)
Björn K
14

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php memiliki banyak saran, termasuk:

sementara beberapa orang menemukan tag pendek dan tag gaya ASP nyaman, mereka lebih mudah dibawa-bawa, dan umumnya tidak direkomendasikan.

dan

perhatikan bahwa jika Anda menanamkan PHP ke dalam XML atau XHTML, Anda harus menggunakan <?php ?>tag untuk tetap mematuhi standar.

dan

Menggunakan tag pendek harus dihindari ketika mengembangkan aplikasi atau perpustakaan yang dimaksudkan untuk redistribusi, atau penyebaran pada server PHP yang tidak di bawah kendali Anda, karena tag pendek mungkin tidak didukung pada server target. Untuk kode portabel dan dapat didistribusikan kembali, pastikan untuk tidak menggunakan tag pendek.

Oliver Charlesworth
sumber
14

Jika ada yang masih memperhatikan ini ... Pada PHP 5.4.0 Alpha 1 <?=selalu tersedia:

http://php.net/releases/NEWS_5_4_0_alpha1.txt

Jadi sepertinya tag pendek (a) dapat diterima dan (b) di sini untuk tinggal. Setidaknya untuk saat ini ...

James Alday
sumber
5
<?=tidak dianggap sebagai tag pendek pada 5.4
T0xicCode
12
  • Tag pendek tidak diaktifkan secara default di beberapa webservers (host bersama, dll.), Sehingga portabilitas kode menjadi masalah jika Anda perlu pindah ke salah satunya.

  • Keterbacaan dapat menjadi masalah bagi sebagian orang. Banyak pengembang mungkin menemukan bahwa <?phpmenarik perhatian sebagai penanda yang lebih jelas dari awal blok kode daripada <?ketika Anda memindai file, terutama jika Anda terjebak dengan basis kode dengan HTML dan PHP yang terjalin erat.

ConroyP
sumber
2
Tag pendek diaktifkan di 95% pengunjung web.
Paolo Bergantino
19
Saya tidak membeli argumen "keterbacaan". Jika Anda menggunakan PHP sebagai bahasa templating, <?= $var ?>jauh lebih mudah dibaca daripada<?php echo $var ?>
Frank Farmer
2
@Paulo ini mungkin telah berubah sejak '08 tetapi instance EC2 Ubuntu dan Fedora dengan yum instal dan versi apt-get PHP telah dinonaktifkan penandaan singkat secara default
Doug Molineux
2
gunakan tag lengkap dan Anda akan mendapat 100% :)
Elvis Ciotti
1
@ Frankfarmer, saya pikir dia membandingkan yang tanpa gema. <?vs <?php.
Pacerier
11

Catatan: Mulai di PHP 5.4 tag pendek <?=,, sekarang selalu tersedia.

brunoais
sumber
5

Saya membaca halaman ini setelah mencari informasi tentang topik tersebut, dan saya merasa bahwa satu masalah besar belum disebutkan: kemalasan vs konsistensi. Tag "asli" untuk PHP adalah <? Php dan?>. Mengapa? Saya tidak begitu peduli. Mengapa Anda ingin menggunakan sesuatu yang lain ketika itu jelas untuk PHP? <% dan%> berarti ASP untuk saya, dan <script ..... berarti Javascript (dalam kebanyakan kasus). Jadi untuk konsistensi, pembelajaran cepat, portabilitas, dan kesederhanaan, mengapa tidak berpegang pada standar?

Di sisi lain saya setuju bahwa tag pendek di templat (dan HANYA di templat) tampaknya berguna, tetapi masalahnya adalah kita baru saja menghabiskan banyak waktu untuk membahasnya di sini, sehingga mungkin akan memakan waktu yang sangat lama untuk benar-benar terbuang sia-sia sebanyak itu mengetik tiga karakter tambahan "php" !!

Walaupun memiliki banyak opsi itu bagus, itu sama sekali tidak logis dan dapat menyebabkan masalah. Bayangkan jika setiap bahasa pemrograman diizinkan 4 atau lebih jenis tag: Javascript bisa menjadi <JS atau <script .... atau <% atau <? JS .... apakah itu membantu? Dalam kasus PHP urutan parsing cenderung mendukung hal-hal ini, tetapi bahasa ini dalam banyak hal tidak fleksibel: ia melempar pemberitahuan atau kesalahan pada sedikit inkonsistensi, namun tag pendek sering digunakan. Dan ketika tag pendek digunakan pada server yang tidak mendukungnya, perlu waktu yang sangat lama untuk mencari tahu apa yang salah karena dalam beberapa kasus tidak ada kesalahan yang diberikan.

Akhirnya, saya tidak berpikir bahwa tag pendek adalah masalah di sini: hanya ada dua jenis logis dari blok kode PHP - 1) kode PHP biasa, 2) gema template. Untuk yang pertama, saya sangat percaya bahwa hanya <? Php dan?> Harus diizinkan hanya untuk menjaga semuanya konsisten dan portabel. Untuk yang terakhir, metode <? = $ Var?> Jelek. Kenapa harus seperti ini? Mengapa tidak menambahkan sesuatu yang jauh lebih logis? <? php $ var?> Itu tidak akan melakukan apa-apa (dan hanya dalam kemungkinan paling jauh hal itu dapat bertentangan dengan sesuatu), dan itu dapat dengan mudah menggantikan sintaks <? = canggung. Atau jika itu masalah, mungkin mereka bisa menggunakan <? Php = $ var?> Sebagai gantinya dan tidak khawatir tentang inkonsistensi.

Pada titik di mana terdapat 4 opsi untuk tag buka dan tutup dan penambahan acak dari tag "echo" khusus, PHP mungkin juga memiliki bendera "tag buka / tutup kustom" di php.ini atau .htaccess. Dengan begitu desainer dapat memilih yang paling mereka sukai. Tetapi karena alasan yang jelas itu berlebihan. Jadi mengapa mengizinkan 4+ opsi?

Daniel Ross
sumber
4

Baik untuk menggunakannya saat Anda bekerja dengan kerangka kerja MVC atau CMS yang memiliki file tampilan terpisah.
Cepat, lebih sedikit kode, tidak membingungkan bagi para desainer. Pastikan konfigurasi server Anda memungkinkan menggunakannya.

Greg
sumber
4

Satu situasi yang sedikit berbeda adalah ketika mengembangkan aplikasi CodeIgniter . CodeIgniter tampaknya menggunakan shorttag setiap kali PHP digunakan dalam templat / tampilan, jika tidak dengan model dan pengontrol, selalu menggunakan tag yang panjang. Ini bukan aturan yang keras dan cepat dalam kerangka, tetapi untuk sebagian besar kerangka dan banyak sumber dari penggunaan lain mengikuti konvensi ini.

Dua sen saya? Jika Anda tidak pernah berencana menjalankan kode di tempat lain, maka gunakan jika Anda mau. Saya lebih suka tidak perlu melakukan pencarian besar-besaran dan mengganti ketika saya menyadari itu adalah ide yang bodoh.

patricksweeney
sumber
4

<?dinonaktifkan secara default di versi yang lebih baru. Anda dapat mengaktifkannya seperti yang dijelaskan dalam Mengaktifkan Tag Pendek dalam PHP .

Dev AnkTech
sumber
Ini dinonaktifkan secara default di versi yang lebih lama juga bukan.
Pacerier
3

Orang-orang IMHO yang menggunakan tag pendek sering lupa melarikan diri dari apa pun yang mereka gema. Alangkah baiknya memiliki mesin templat yang lolos secara default. Saya percaya Rob A menulis hack cepat untuk menghindari tag pendek di aplikasi Zend Frameworks. Jika Anda menyukai tag pendek karena membuat PHP lebih mudah dibaca. Lalu mungkinkah Smarty menjadi pilihan yang lebih baik?

{$myString|escape}

bagi saya itu terlihat lebih baik daripada

<?= htmlspecialchars($myString) ?> 
Adrian Judd
sumber
10
Bagi kebanyakan programmer PHP, opsi kedua lebih masuk akal daripada yang pertama, hanya karena itu adalah fungsi PHP aktual yang kita kenal, sedangkan opsi pertama adalah kode templat semu yang harus kita pelajari di atas PHP. PHP sudah menjadi bahasa templating, menambahkan bahasa templating lain di atasnya seperti Smarty adalah IMO yang berlebihan.
Bug Magnet
3
Twig adalah mesin templat dengan pelepasan
mateusza
3

Kita harus bertanya apa gunanya menggunakan tag pendek.

Lebih cepat mengetik

MDCore berkata:

<?= jauh lebih nyaman daripada mengetik <?php echo

Ya itu. Anda menyimpan harus mengetik 7 karakter * X kali sepanjang skrip Anda.

Namun, ketika sebuah skrip membutuhkan waktu satu jam, atau 10 jam, atau lebih, untuk mendesain, mengembangkan, dan menulis, seberapa relevan beberapa detik waktu tidak mengetik 7 karakter di sana-sini selama durasi skrip?

Dibandingkan dengan potensi untuk beberapa inti, atau semua, skrip Anda tidak berfungsi jika tag pendek tidak diaktifkan, atau aktif tetapi pembaruan atau seseorang yang mengubah konfigurasi file / server ini menghentikannya berfungsi, potensi lain.

Manfaat kecil yang Anda peroleh tidak mendekati beratnya masalah yang mungkin terjadi, yaitu situs Anda tidak berfungsi, atau lebih buruk, hanya sebagian saja yang tidak berfungsi dan dengan demikian sakit kepala untuk diselesaikan.

Lebih mudah dibaca

Ini tergantung pada keakraban .
Saya selalu melihat dan menggunakan <?php echo. Jadi walaupun <?=tidak sulit untuk dibaca, itu tidak akrab bagi saya dan dengan demikian tidak mudah dibaca .

Dan dengan split pengembang front end / back end (seperti halnya dengan sebagian besar perusahaan) akankah pengembang front end yang bekerja pada templat-templat tersebut menjadi lebih dikenal mengetahui <?=sama dengan "PHP tag terbuka dan gema"?
Saya akan mengatakan sebagian besar akan lebih nyaman dengan yang lebih logis. Artinya, tag terbuka PHP yang jelas dan kemudian apa yang terjadi "echo" - <?php echo.


Masalah penilaian risiko = seluruh skrip situs atau inti gagal berfungsi;

Potensi masalah sangat rendah + keparahan hasil sangat tinggi = risiko tinggi

Kesimpulan

Anda menghemat beberapa detik di sana-sini tidak harus mengetik beberapa karakter, tetapi berisiko banyak untuk itu, dan juga kemungkinan kehilangan keterbacaan sebagai hasilnya.

Coders depan atau belakang yang lebih akrab dengan <?=lebih cenderung untuk mengerti <?php echo, karena mereka hal-hal standar PHP - <?phptag terbuka standar dan "gema" yang sangat terkenal.
(Bahkan front end coders harus tahu "echo" atau mereka tidak akan bekerja pada kode apa pun yang dilayani oleh suatu kerangka kerja).

Sedangkan sebaliknya tidak mungkin, seseorang tidak mungkin secara logis menyimpulkan bahwa tanda sama dengan tag pendek PHP adalah "echo".

James
sumber
Tidak ada hubungannya dengan mengetik. Ini lebih pendek sehingga berpotensi lebih mudah dibaca . Seseorang yang terbiasa membaca <?=akan <?=lebih mudah membaca daripada orang yang biasa membaca <?php echomembaca <?php echo.
Pacerier
@Pacerier Shorter tidak hanya = lebih mudah dibaca. Kita semua berbeda. Yang Anda maksud adalah, lebih mudah dibaca untuk Anda . Seperti yang saya masukkan dalam jawaban saya, karena saya sudah terbiasa <?phpmelihat bahwa di seluruh kode berkali-kali lebih akrab bagi saya daripada <?=- keakraban membuat segalanya lebih mudah - itu belum tentu lebih baik.
James
Tidak, saya tidak membandingkan Anda dan saya, saya katakan orang yang terbiasa membaca <?=akan membaca <?=lebih baik daripada orang yang membaca <?php echomembaca <?php echo. Itu berarti jika kita memiliki dua salinan orang X yang identik, dan mengubahnya hanya dalam aspek di mana satu digunakan untuk membaca <?=, dan yang lainnya digunakan untuk membaca <?php echo, Salinan pertama dapat mencapai nilai keterbacaan xsaat membaca menggunakan sintaks yang diinginkannya, sedangkan salinan kedua dapat mencapai nilai keterbacaan ysaat membaca sintaks yang diinginkan, di mana x >= y.
Pacerier
Tidak, Anda tidak mengerti intinya. Saya mengacu pada potensi sistem, yang tidak ada hubungannya dengan orang tertentu. Anda bisa mengatakan orang yang terbiasa mengetik dengan keyboard qwerty akan mengetik lebih cepat dengan qwerty, sedangkan orang yang biasa mengetik dengan dvorak akan mengetik lebih cepat dengan dvorak, tetapi kenyataannya tidak berubah bahwa kedua sistem memiliki potensi yang berbeda.
Pacerier
3

Mari kita hadapi itu. PHP jelek sekali tanpa tag pendek.

Anda dapat mengaktifkannya dalam .htaccessfile jika Anda tidak dapat mengakses php.ini:

php_flag short_open_tag on
Jimmer
sumber
3
Salah. Kadang-kadang, server diatur untuk menolak segala jenis overriding, Pak.
Alfabravo
17
Benar, tetapi jika host Anda tidak memungkinkan Anda untuk menimpa dengan htaccess, Anda benar-benar membutuhkan host baru! :)
Brian Lacy
1
tidak bekerja pada antarmuka baris perintah, dan php_flag tidak didukung sepanjang waktu
Elvis Ciotti
3

Untuk menghindari masalah portabilitas, mulailah tag PHP dengan <?phpdan seandainya file PHP Anda murni PHP, tanpa HTML, Anda tidak perlu menggunakan tag penutup.

Kumar
sumber
2
  • Tag pendek dapat diterima untuk digunakan jika Anda yakin server akan mendukungnya dan pengembang Anda akan memahaminya.
  • Banyak server tidak mendukungnya, dan banyak pengembang akan memahaminya setelah melihatnya sekali.
  • Saya menggunakan tag lengkap untuk memastikan portabilitas, karena sebenarnya tidak terlalu buruk.

Dengan mengatakan itu, seorang teman saya mengatakan ini, untuk mendukung tag asp-style alternatif terstandarisasi , seperti <%bukannya <?, yang merupakan pengaturan di php.ini disebut asp_tags. Inilah alasannya:

... konvensi yang sewenang-wenang harus distandarisasi . Yaitu, setiap kali kita dihadapkan dengan serangkaian kemungkinan yang semuanya bernilai sama - seperti tanda baca aneh apa yang harus digunakan bahasa pemrograman kita untuk membatasi diri - kita harus memilih satu cara standar dan tetap menggunakannya. Dengan begitu kita mengurangi kurva belajar dari semua bahasa (atau apa pun yang terkait dengan konvensi).

Kedengarannya bagus untuk saya, tapi saya tidak berpikir ada di antara kita yang bisa mengitari gerobak di sekitar penyebab ini. Sementara itu, saya akan tetap berpegang teguh <?php.

stereoscott
sumber
2

Saya pikir layak menyebutkan bahwa pada PHP 7:

  • Tag PHP ASP pendek <% … %>hilang
  • Tab PHP pendek <? … ?>masih tersedia jika short_open_tagdisetel ke true. Ini standarnya.
  • Sejak PHP 5.4, pendek Cetak tag <?=… ?>yang selalu diaktifkan, terlepas dari short_open_tagpengaturan.

Riddance bagus untuk yang pertama, karena mengganggu bahasa lain.

Sekarang tidak ada alasan untuk tidak menggunakan tag cetak pendek, selain dari preferensi pribadi.

Tentu saja, jika Anda menulis kode agar kompatibel dengan versi lama PHP 5, Anda harus tetap berpegang pada aturan lama, tetapi ingat bahwa apa pun sebelum PHP 5.6 sekarang tidak didukung.

Lihat: https://secure.php.net/manual/en/language.basic-syntax.phptags.php

Manngo
sumber
1
Kecuali saya salah, poin pertama Anda salah. Doc mengatakan tag ASP, bukan tag PHP pendek, hilang pada PHP 7.0.0.
direformasi
@ direformasi Anda benar sekali. Saya akan mengedit jawaban saya. Terima kasih
Manngo
1

Jika Anda peduli tentang XSS maka Anda harus menggunakan <?= htmlspecialchars(…) ?>sebagian besar waktu, jadi tag pendek tidak membuat perbedaan besar.

Bahkan jika Anda mempersingkat echo htmlspecialchars()untuk h(), itu masih masalah yang Anda harus ingat untuk menambahkannya hampir setiap waktu (dan mencoba untuk melacak data yang pra-melarikan diri, yang tidak lolos-tapi-tidak berbahaya hanya membuat kesalahan lebih mungkin).

Saya menggunakan mesin templating yang aman secara default dan menulis <?phptag untuk saya.

Kornel
sumber
7
Jika Anda menemukan diri Anda mengetik "<? Php echo htmlspecialchars ($ text, ENT_QUOTES, 'UTF-8');?> 500 kali sehari, Anda mungkin ingin membuat fungsi pintasan bernama" h "seperti Rails memiliki .." < ? = h ($ text)?> "jauh lebih mudah dibaca ketika memindai template.
Alexander Malfait
1
Memang memang lebih baik, tetapi dengan mesin templat itu mungkin hanya $ {text} atau semacamnya (dan Anda tidak harus ingat untuk menambahkan h ())
Kornel
7
PHP itu sendiri adalah mesin templating. Ketika Anda berhenti menggunakan tag pendek itu mulai menjadi mesin templating buruk karena menjadi terlalu bertele-tele.
Josef Sábl
1
@Alexander Malfait itu tip yang bagus. Tetapi <? = Tidak diperlukan. Anda hanya bisa membuat fungsi menggemakan string daripada mengembalikan, jadi Anda akan menulis <? Php h ('hello')?> Bukankah kita sudah melakukannya ketika kita de i18n? <? php _e ('')?> tidak terlalu buruk.
VladFr
1

<?php ?>jauh lebih baik untuk digunakan karena pengembang bahasa pemrograman ini telah secara besar-besaran memperbarui bahasa inti mereka. Anda dapat melihat perbedaan antara tag pendek dan tag panjang.

Tag pendek akan disorot sebagai merah terang sedangkan yang lebih panjang disorot lebih gelap!

Namun, menggemakan sesuatu, misalnya: <?=$variable;?>baik-baik saja. Tetapi lebih suka tag yang lebih panjang.<?php echo $variable;?>

Script M50
sumber
1

Konversi <?(tanpa spasi tambahan) menjadi <?php(dengan spasi tambahan):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\?(?!php|=|xml|mso| )/<\?php /g'

Konversi <?(dengan ruang trailing) ke <?php(mempertahankan ruang trailing):

find . -name "*.php" -print0 | xargs -0 perl -pi -e 's/<\? /<\?php /g'
Fatih Akgun
sumber
1

Tag pendek selalu tersedia di php. Jadi Anda tidak perlu mengulangi pernyataan pertama dalam skrip Anda

contoh:

    $a =10;
    <?= $a;//10 
    echo "Hellow";//
    echo "Hellow";

   ?>

Tiba-tiba Anda perlu menggunakan untuk satu skrip php maka Anda dapat menggunakannya. contoh:

<html>
<head>
<title></title>
</head>  
<body>
<p>hellow everybody<?= hi;?></p>
<p>hellow everybody  </p> 
<p>hellow everybody  </p>   
</body>
</html>
GaziAnis
sumber
1

Pada 2019 saya tidak setuju dengan jawaban tertentu di sini. Saya merekomendasikan untuk menggunakan tag panjang

<?php /* code goes here */ ?>

atau tag gema pendek

<?= /* code goes here */ ?>

Alasan: Mereka direkomendasikan oleh standar pengkodean dasar PSR-1

Tag pendek lain seperti <? /* code goes here */ ?>tidak disarankan.

Spesifikasi mengatakan:

Kode PHP HARUS menggunakan tag panjang atau tag pendek-gema; itu TIDAK HARUS menggunakan variasi tag lainnya .

Blackbam
sumber
1

3 tag tersedia di php:

  1. tag bentuk panjang yang <?php ?>tidak perlu direktifasi yang dikonfigurasi
  2. short_open_tag yang <? ?> tersedia jika opsi short_open_tag di php.ini aktif
  3. tag lebih pendek <?= karena php 5.4.0 selalu tersedia

dari php 7.0.0 asp dan tag skrip dihapus

GaziAnis
sumber
Itu tidak menjawab pertanyaan.
RalfFriedl
-5

Tidak, dan mereka dihapus oleh PHP 6 jadi jika Anda menghargai umur panjang kode, jangan gunakan atau <% ... %>tag.

coderGeek
sumber
4
Saya telah melihat posting blog lain yang mengatakan mereka tidak akan ditinggalkan, hanya tag pendek gaya ASP.
MDCore
22
Sepertinya jawaban ini salah, menurut tautan ini dari rapat Pengembang PHP: php.net/~derick/…
Charles
7
MENGAPA mereka begitu buruk, mengapa? Semua orang sangat percaya diri bahwa mereka baaaaaad tetapi tidak ada yang mengatakan mengapa.
Josef Sábl
6
SALAH. Mereka menghapus tag <%%>, seperti yang seharusnya. Mereka tidak memiliki tujuan selain membingungkan. <? ?> tag tidak akan terpengaruh; tetapi tentu saja mereka masih dapat dikonfigurasi berdasarkan per-server, dan Anda harus selalu mengetahui persyaratan platform target Anda.
Brian Lacy
6
Informasi ini tampaknya salah dan menyesatkan, dan harus diperbaiki oleh penulis.
tex