PHP kısa etiketlerinin kullanımı kabul edilebilir mi?


522

Resmi belgelere göre bilgiler :

PHP'de kullanılabilen dört farklı açılış ve kapanış etiketi çifti vardır. Bunlardan ikisi <?php ?> ve <script language="php"> </script>her zaman kullanılabilir. Diğer ikisi kısa etiketler ve ASP stili etiketlerdir ve php.ini yapılandırma dosyasından açılıp kapatılabilir. Bu nedenle, bazı insanlar kısa etiketleri ve ASP tarzı etiketleri uygun bulurken, daha az taşınabilir ve genellikle önerilmez .

Benim durumumda en sunucuların do kısa etiketler etkindir. Yazıyor

<?=

yazmaktan çok daha uygun

<?php echo 

Programcıların rahatlığı önemli bir faktördür, bu yüzden neden önerilmez?


61
Parçayı cevaplamak için why, Zend PHP 5 sertifikasyon kılavuzunu alıntı yapardım: "Kısa etiketler, bir süre için PHP dünyasında standarttı; Ancak, XML üstbilgileriyle çakışmanın büyük dezavantajı var ve bu nedenle biraz var yol kenarına düşmüş. "
Fluffy

7
Bu sorunun ortaya çıktığı kullanım durumu nedir, bu, geliştiricilerin PHP kullanarak XML oluşturması için bir acı anlamına mı geliyor?
Jon z

9
Diyelim ki herkese açık olmasını istediğiniz XML belgeleriniz var, ancak belgelerin tarayıcınız tarafından ayrıştırılabilmesi için herhangi bir nedenle php ayrıştırılabilir olmasını istiyorsunuz. Kısa etiketleri, açık olacak şekilde kullanırsınız ve aniden XML belgesi, XML üstbilgileri aracılığıyla ayrıştırılarak işleri bozar. Bunu uzun zaman önce anlamaya çalışarak beni deli etti. Kısa kodlar çalıştırdığım herhangi bir sunucuda devre dışı bırakıldığından ve birlikte çalıştığım herhangi bir ekibin kısa olmayan koda başvurmak zorunda kalmasından sonra
thenetimp

43
PHP 5.4.0'dan itibaren short_open_tag yönergesi kısa echo etiketini içermez <?= $example;?> ! Diğer tüm kısa etiketlerin kullanımı boşuna kabul edildiğinden bu çok önemlidir. Her neyse, kısa eko etiketinin kullanımı artık teşvik ediliyor. Daha pürüzsüz ve daha düzenli bir kod tabanı sağlar - esp. dosyaları görüntüleme. Yani PHP> = 5.4.0 <?= ?> kullanılabilir ayar yapmadan short_open_tag . Lütfen kodunuzdaki diğer kısa etiketleri kullanmayın. Kod Tanrılar bunu yaparken çok kızıyor ...
Borislav Sabev

6
Zaten çok fazla uzun cevaplar vardır çünkü hızlı bir yorum olarak bu eklemek için gidiyorum: <?edilmez , sadece açılış için XML kullanılan <?xml version="1.0" ?>beyanı; en yaygın ikinci örnek olan "işlem talimatları" için genel sözdizimidir <?xml-stylesheet ... ?>. <?phpgerçekte geçerli bir işleme talimatı <?=olarak kabul edilebilir (5.4+ sürümünde izin verildiği gibi), ancak tümünün de iddia <?edilmesi sözdizimleri arasında gereksiz bir çatışma yaratır.
IMSoP

Yanıtlar:


374

Kodunuzu desteklenmeyen bir sunucuya taşımak zorunda kalırsanız (ve etkinleştiremezseniz) bu bir PITA olduğu için önerilmez. Dediğiniz gibi, paylaşılan ana sürü yapmak destek shorttags ancak "çok" değil hepsi. Komut dosyalarınızı paylaşmak istiyorsanız, tam sözdizimini kullanmak en iyisidir.

Ben katılıyorum <?ve <?=daha programcılar üzerinde kolay <?phpve <?php echoancak sürece aynı formu her zaman kullanmak (ve mekanlarda (örn chuck yok olarak bulmak ve değiştir bir toplu yapmak mümkündür: <? phpya <? =)

Okunabilirliği hiç bir sebep olarak almıyorum. Çoğu ciddi geliştiricinin sözdizimi vurgulama seçeneği vardır.

ThiefMaster'ın yorumlarda bahsettiği gibi, PHP 5.4'ten itibaren, kısa <?= ... ?>etiket ayarlarına bakılmaksızın her yerde etiketler desteklenmektedir . Bu, taşınabilir kodda güvenli oldukları anlamına gelmelidir, ancak bu, PHP 5.4+'ye bağımlılık olduğu anlamına gelir. 5.4 öncesi desteği desteklemek istiyorsanız ve kısa etiketleri garanti edemiyorsanız yine de kullanmanız gerekir <?php echo ... ?>.

Ayrıca, ASP etiketlerinin <%,%>, <% = ve komut dosyası etiketinin PHP 7'den kaldırıldığını bilmeniz gerekir . Bu nedenle, uzun vadeli taşınabilir kodu desteklemek istiyorsanız ve en modern araçlara geçmek istiyorsanız, kod parçalarını değiştirmeyi düşünün.


91
Yani açıklama: Desteklenmedikleri için kötü mü? Ama neden desteklenmiyorlar? Çünkü şartnamenin bir parçası değiller mi? Tamam, ama neden şartnamenin bir parçası değiller? Bu cevapla biraz disapointedım.
Josef Sábl

61
Neden burada olduğumuz, her şey nasıl başladı vb. Gibi "büyük soruları" tartışmak için burada değilim. Kısa etiket desteği paylaşılan sunucularda garanti edilmez ve bir sonraki büyük sürümü tamamen kaldırılır. Tüm bilmen gereken bu.
Oli

39
Zorunlu PHP olan bir şablon motoru. : P
Sözdizimi Hatası

49
Kısa etiketler aşamalı olarak kaldırılmıyor. Yalnızca ASP stili kısa etiketler.
Brian Lacy

46
PHP 5.4'ün (çok yakın) geleceğinde, <? = <? = aşamalı olarak kaldırılmıyor, tam tersi dilin temel bir parçası olarak kabul ediliyor.
Bay Griever

175

<?=$whatever?>Gitmesine izin vermek için çok düşkünüm . Onunla hiç problem yaşamadım. Beni kıçından ısırıncaya kadar bekleyeceğim. Tüm ciddiyetle, (benim) istemcilerin% 85'i, nadiren kapatıldıklarında php.ini dosyasına erişebilir . Diğer% 15 ana akım barındırma sağlayıcılarını kullanıyor ve neredeyse hepsinde etkin. Onları seviyorum.


41
@B Seven Ortaya çıkabilecek her teorik problemden kaçınmaya çalışırsanız, kodunuz neredeyse kesinlikle verimsiz ve buggy olacaktır. PHP grubu kısa etiketleri [ASP etiketleri değil) aşamalı olarak kabul edene kadar, ısırılma endişesi çok daha azdır ve potansiyel çözüm, zamanınızı "düzeltmek" için harcayabileceğiniz diğer şeylerden çok daha basittir.
SamGoody

18
eğer seni ısırırsa, daha iyi bir barındırma hareketine geçin
Lie Ryan

4
Gerçekten çünkü bir şey kullanmayan kabul etmiyorsanız olabilir desteklenmeyebilir. Bir sunucuda desteklenmeyen diğer özellikleri kullanmamalı mıyız? MYSQL mi MYSQLI mı? Daha iyi bir ev sahibine geçmek için biraz zaman harcamaktan kaçınmak için zamanınızı yavaş yavaş, tekrar tekrar uzun etiketler yazacaksınız.
Dean Veya

2
@BSeven, Yani varsayılan olarak gönderilenler dışında herhangi bir PHP uzantısı kullanmıyor musunuz?
Pacerier

143

PHP 5.4'ten başlayarak, yankı kısayolu her zaman etkin olacağından yankı kısayolu kısa etiketlerden ayrı bir sorundur. Şimdi bir gerçek:

Böylece yankı kısayolunun kendisi ( <?=) artık güvenlidir.


19
Bunun tek "kısa etiket" olduğunu söyleyebilirim. <?phptüm sınıf dosyalarının başlangıcında kullanılabilir <?=. Kazan-kazan.
Xeoncross

6
So the echo shortcut itself (<?=) is safe to use... PHP 5.4'e ihtiyacınız olduğu sürece. Yaygın olarak dağıtılan PHP uygulamaları (wordpress gibi) 5.4'e ihtiyaç duyma lüksüne sahip değildir ve hatta PHP 5'in yayınlanmasından tam 7 yıl sonra 2011'e kadar PHP 4 desteği sunmaya devam etmiştir. Yazılımınızın tüm kurulumlarının doğrudan şirket tarafından işletildiği facebook gibi bir yerdeyseniz, 5.4 desteğine ihtiyaç duymak, wordpress gibi bir projede çalışmaktan çok daha kolaydır.
Frank Farmer

@dukeofgaming, Wow iyi yakalama, SVN revizyonlarının web'de erişilebilir olduğunu bilmiyordu.
Pacerier

82

Bütün bu tartışma ile ilgili sorun PHP'nin geçici bir dil olarak kullanılmasında yatıyor. Hiç kimse etiketlerin uygulama kaynak dosyalarında kullanılması gerektiğini savunmuyor.

Bununla birlikte, PHP'nin gömülebilir sözdizimi, güçlü bir şablon dili olarak kullanılmasına izin verir ve şablonlar mümkün olduğunca basit ve okunabilir olmalıdır. Birçoğu, Smarty gibi çok daha yavaş, eklenti şablonlu bir motor kullanmayı daha kolay buldu, ancak aramızda hızlı oluşturma ve saf kod tabanı talep eden saflar için PHP, şablon yazmanın tek yoludur.

Kısa etiketlerin kullanımına yönelik SADECE geçerli argüman, tüm sunucularda desteklenmemesidir. Muhtemelen PHP ve XML'i karıştırmamalısınız çünkü XML belgeleriyle çatışmalar hakkındaki yorumlar gülünçtür; ve eğer öyleyse, metin dizeleri çıkarmak için PHP kullanıyor olmalısınız. Güvenlik asla sorun olmamalı, çünkü şablon dosyalarının içine veritabanı erişim kimlik bilgileri gibi hassas bilgileri koyuyorsanız, o zaman daha büyük sorunlarınız var!

Şimdi o zaman, sunucu desteği konusunda, kuşkusuz, birileri hedef platformlarının farkında olmalıdır. Paylaşılan barındırma olası bir hedefse, kısa etiketlerden kaçınılmalıdır. Ancak birçok profesyonel geliştirici için (benim gibi), istemci sunucu gereksinimlerini dikte edeceğimizi kabul eder (ve aslında gerçeğe bağlıdır). Genellikle sunucuyu kendim kurmaktan sorumluyum.

Ve ASLA bize sunucu yapılandırmasının mutlak kontrolünü vermeyen bir barındırma sağlayıcısıyla çalışmayız - böyle bir durumda sadece kısa etiket desteğini kaybetmekten çok daha fazla sorunla çalışmaya güvenebiliriz. Sadece olmadı.

Bu yüzden evet - Kısa etiket kullanımının dikkatle tartılması gerektiğini kabul ediyorum. Ancak, HER ZAMAN bir seçenek olması gerektiğine ve çevresinin farkında olan bir geliştiricinin bunları kullanmaktan çekinmeyin olması gerektiğine de inanıyorum.


6
Herhangi bir nedenle, .xml dosyalarını mod_php'ye geçirecek şekilde ayarlanmış bir apache varsa, <? Xml olayı kısa etiketleri olan bir baş ağrısı olurdu. Ama bu garip bir düzen.
Frank Farmer

3
Bir şablon çıktı belgelerinde bazı türlerinde geçici çözümler olmadan gömülemez dil büyük bir fail olduğunu. Ben PHP kodu ve kısa etiketleri ile bir XML şablonu olmamalı tek nedeni, işe yaramaz çünkü mantıklı değil çünkü.
Vinko Vrsalovic

8
PHP'nin avantajlarından hızlı ve kullanışlı bir şablon olarak yararlanmak "büyük bir başarısızlık" değildir. Daha önce de söylediğim gibi, faydaları ve dezavantajları tartmak ve kodu seçtiğiniz yaklaşımı karşılayacak şekilde yazmak meselesidir. Geçerli bir yaklaşımı, belirli bir senaryoda (kolayca çözülebilen) çalışmadığı için kategorik olarak reddetmeyin.
Brian Lacy

5
Ben herhangi bir geçerli yaklaşım kategorik olarak reddetmiyorum (soruya cevabım bakın.) Sen kategorik olarak XML XML reddetti, ben alıntı: "Yine de PHP ve XML karıştırma olmamalıdır". Ayrıca, bahsettiğim büyük başarısızlık <?, XML'de çirkin geçici çözümlere yol açtığı için kısa etiket olarak kullanma kararıydı . Bununla birlikte, bunun faydaları ve dezavantajları tartma meselesi olduğunu ve ne yaptığınızı biliyorsanız, kesinlikle yapabileceğinizi kabul ediyorum. Ama bu <?iyi bir seçim yapmıyor .
Vinko Vrsalovic

3
Partiye biraz geç kaldım, ama bu cevabı gerçekten çok seviyorum ve durumla ilgili deneyimimi yansıtıyor. Ofisimizde konu hakkında bazı anlaşmazlıklar olsa da, yıllardır php'de günlük çalışmaya yakın bir zamanda bu konuya hiç girmedim diyebilirim. PHP XML oluşturmak için kullanıldığında, benim deneyimime göre, her zaman PHP ile doğrudan doğrudan şablonlaştırılmamış, son derece dinamik içerik bağlamında olmuştur, bu yüzden sorun asla ortaya çıkmaz.
redreinard

33

Varsayılan MVC yapılandırmasında " şablon dili olarak PHP " yi zorlayan Zend Framework sayesinde kısa etiketler geri geliyor . Tartışmanın ne hakkında olduğunu görmüyorum, yaşamınız boyunca üreteceğiniz yazılımların çoğu sizin veya şirketinizin kontrol edeceği bir sunucuda çalışacaktır. Kendinizi tutarlı tuttuğunuz sürece herhangi bir sorun olmamalıdır.

GÜNCELLEME

Uzun form kullanan Magento ile biraz iş yaptıktan sonra . Sonuç olarak, uzun biçimine geçtim:

<?php and <?php echo

bitmiş

<? and <?=

Birlikte çalışabilirliği sağlamak için az miktarda çalışma gibi görünüyor.


8
Ben serbest ve tüm kod paylaşılan barındırma gider, bu yüzden hiç kontrol! :)
MDCore

12
Kendi coloc'a taşımak için yeterince müşteriniz varsa, paylaşılan barındırma güvenli değildir ve kararsızdır.
Jake McGraw

2
Zend'in uzun sürümü kullandığından Zend'in geri getirdiği kısa etiketler anlaşılmadı: framework.zend.com/manual/en/zend.view.scripts.html
Gerry

3
@Gerry Bunu da son zamanlarda okudum, bu konuyla ilgili son yoruma bakın: Kısa açık etiketleri etkinleştirmek için .htaccess'i güncelleyin
MrWhite

2
Güncel biçiminde hiçbir anlam ifade etmeyen, UPDATE sonrası ilk cümledeki dilbilgisini gerçekten düzeltmelisiniz.
redreinard

22

Çünkü XML bildirimleri ile üretebileceği karışıklık. Birçok kişi hemfikir ile yine de bunu.

Ek bir endişe, sadece son barındırma sunucusunun onları kapattığını bulmak için her şeyi kısa etiketlerle kodlamak için yaratacağı acıdır ...


Short_tags açıksa XML bildirimi yine de karışıklığa neden olmaz mı?
MDCore

Dolayısıyla, XML bildirimini doğrudan çıktılamak yerine, PHP yankısı vardır. Gerçekten iyi bir yalan değil.
moo

Hiçbir şeyin çürümesi değil. Bu da "gerçekçinin kapatır" nedeninin nedeni olan tek gerçek nedendir, elbette ne yaptığınızı biliyorsanız, her zamanki gibi kullanabilirsiniz.
Vinko Vrsalovic

1
@macek: Bunun farkındayım. Düşündüğüm ilk örnek buydu. Başka bir, PHP'yi bir XML dosyasına gömerseniz ne olur? Bunu doğrudan yapamazsın. Ve bana bu sorunun çözümünü de söyleme, bunların farkındayım. Mesele şu ki PHP'nin bir XML dosyasını ayrıştırma yolları vardır. Muhtemelen hepsini geçici çözümlerle ( <?='<?xml') veya "bunu yapmamalısınız" diyerek işten çıkarabilirsiniz , ancak bu durumun ortadan kalkabileceği gerçeğini oluşturmaz.
Vinko Vrsalovic

1
kısa etiketler işe yaramazsa nasıl bir acıdır? bir toplu yapmak ve <?=onunla değiştirmek çok kolaydır <? echo . birçok metin düzenleyicisi bunu binlerce dosyaya aynı anda kolayca uygulayabilir.
Yamiko

20

Aynı harika akış diyagramı aşağıdadır:

karar verme ağacı <? =

Kaynak: Yazılım Mühendisliği Stack Exchange ile ilgili benzer soru


2
Bu, <?soruda belirtilen kısa etiketlerle aynı değil, kısa yankı etiketinin kullanılıp kullanılmayacağını açıklamaktadır (5.4 öncesi aynı yapılandırma ayarını kullanmasına rağmen)
Alok

Aslında, bu durum herkesin anlayabileceği bir cevap olmalıdır, ancak koşullar birçok durumda neden kısa etiketler kullanmak istemediğiniz konusunda açıklanmamıştır (örneğin, paylaşılan bir barındırma sistemindeki php.ini dosyasını değiştiremiyoruz)
Björn K

14

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php , aşağıdakiler de dahil olmak üzere birçok tavsiyeye sahiptir:

bazı insanlar kısa etiketleri ve ASP tarzı etiketleri uygun bulurken, daha az taşınabilir ve genellikle önerilmez.

ve

PHP'yi XML veya XHTML içine gömüyorsanız <?php ?>, standartlara uymak için etiketleri kullanmanız gerektiğini unutmayın .

ve

Kısa etiketler hedef sunucuda desteklenmeyebileceğinden, yeniden dağıtma veya kontrolünüz altında olmayan PHP sunucularında dağıtım amaçlı uygulamalar veya kütüphaneler geliştirirken kısa etiketler kullanmaktan kaçınılmalıdır. Taşınabilir, yeniden dağıtılabilir kod için kısa etiketler kullanmadığınızdan emin olun.



12
  • Kısa etiketler bazı web sunucularında (paylaşılan ana makineler vb.) Varsayılan olarak açık değildir, bu nedenle bunlardan birine geçmeniz gerekirse kod taşınabilirliği sorun haline gelir.

  • Okunabilirlik bazıları için bir sorun olabilir. Birçok geliştirici , özellikle HTML ve PHP ile sıkı bir şekilde dokunmuş bir kod tabanı ile sıkışmışsanız, bir kod taramanın <?phpbaşlangıcından daha belirgin bir işaretleyici olarak göze çarpar.<?


2
Kısa etiketler web sunucularının% 95'inde etkinleştirilir.
Paolo Bergantino

19
"Okunabilirlik" argümanını satın almıyorum. PHP'yi geçici bir dil olarak kullanıyorsanız <?= $var ?>, çok daha okunabilir<?php echo $var ?>
Frank Farmer

2
@Paulo bu '08'den beri değişmiş olabilir, ancak PHP'nin yum install ve apt-get sürümlerine sahip EC2 Ubuntu ve Fedora örnekleri varsayılan olarak kısa etiketlemeyi devre dışı bırakmıştır
Doug Molineux

2
tam etiketleri kullanın ve% 100'e sahip olacaksınız :)
Elvis Ciotti

1
@FrankFarmer, sanırım yankısız olanı karşılaştırıyor. <?vs <?php.
Pacerier

11

Not: PHP 5.4'ten başlayarak kısa etiket, <?=şimdi her zaman kullanılabilir.


5

Konu hakkında bilgi aradıktan sonra bu sayfayı okudum ve önemli bir konudan bahsedilmediğini hissediyorum: tembellik ve tutarlılık. PHP için "gerçek" etiketler <? Php ve?>. Neden? Gerçekten umrumda değil. Bunlar PHP için açık olduğunda neden başka bir şey kullanmak istesin ki? <% ve%> benim için ASP anlamına gelir ve <script ..... Javascript anlamına gelir (çoğu durumda). Tutarlılık, hızlı öğrenme, taşınabilirlik ve basitlik için neden standarda bağlı kalmıyorsunuz?

Öte yandan, şablonlardaki (ve SADECE şablonlardaki) kısa etiketlerin yararlı göründüğünü kabul ediyorum, ancak sorun şu ki, burada tartışmak için çok fazla zaman harcadık, muhtemelen boşa gitmenin çok uzun zaman alacağı o kadar zaman "php" ekstra üç karakter yazarak !!

Birçok seçeneğe sahip olmak güzel olsa da, hiç mantıklı değil ve sorunlara neden olabilir. Her programlama dilinin 4 veya daha fazla etiket türüne izin verip vermediğini düşünün: Javascript <JS veya <script .... veya <% veya <? JS .... bu yardımcı olur mu? PHP durumunda, ayrıştırma sırası bu şeylere izin verme lehine olma eğilimindedir, ancak dil başka pek çok açıdan esnek değildir: en ufak bir tutarsızlık üzerine bildirimler veya hatalar atar, ancak kısa etiketler sıklıkla kullanılır. Kısa etiketleri, bunları desteklemeyen bir sunucuda kullanıldığında, bazı durumlarda hata verilmediğinden neyin yanlış olduğunu anlamak çok uzun zaman alabilir.

Son olarak, kısa etiketleri burada sorun olduğunu sanmıyorum: PHP kod blokları sadece iki mantıksal türü vardır - 1) düzenli PHP kodu, 2) şablon yankıları. Birincisi için, sadece her şeyi tutarlı ve taşınabilir tutmak için sadece <? Php ve?> İkincisi için <? = $ Var?> Yöntemi çirkin. Neden böyle olmalı? Neden daha mantıklı bir şey eklemiyorsunuz? <? php $ var?> Bu hiçbir şey yapmaz (ve sadece en uzak olasılıklarda bir şeyle çakışabilir) ve bu garip <? = sözdiziminin yerini alabilir. Ya da bu bir sorunsa, bunun yerine <? Php = $ var?> Kullanabilirler ve tutarsızlıklar konusunda endişelenmezler.

Açık ve kapalı etiketler için 4 seçeneğin ve özel bir "echo" etiketinin rastgele eklenmesinin olduğu noktada PHP'nin php.ini veya .htaccess içinde "özel açma / kapama etiketleri" bayrağı da olabilir. Bu şekilde tasarımcılar en çok sevdiklerini seçebilirler. Ancak bariz nedenlerden ötürü bu aşırıya kaçıyor. Öyleyse neden 4+ seçeneğe izin veresiniz?


4

Ayrı görünüm dosyaları olan bir MVC çerçevesi veya CMS ile çalışırken bunları kullanmak iyidir.
Hızlı, daha az kod, tasarımcılar için kafa karıştırıcı değil. Sadece sunucu yapılandırmanızın bunları kullanmasına izin verdiğinden emin olun.


4

Biraz farklı olan bir durum, bir CodeIgniter uygulaması geliştirmektir . CodeIgniter, PHP bir şablon / görünümde kullanıldığında kısa etiketleri kullanıyor gibi görünüyor, aksi takdirde modeller ve denetleyicilerle her zaman uzun etiketleri kullanır. Bu çerçeve içinde zor ve hızlı bir kural değildir, ancak çoğunlukla çerçeve ve diğer kullanımlardan gelen kaynakların çoğu bu sözleşmeyi izler.

Benim görüşüm? Kodu asla başka bir yerde çalıştırmayı planlamıyorsanız, isterseniz bunları kullanın. Aptalca bir fikir olduğunu fark ettiğimde, büyük bir arama yapmak ve değiştirmek zorunda kalmamayı tercih ederim.



3

Kısa etiketler kullanan IMHO kullanıcıları genellikle yankılandıkları her şeyden kaçmayı unuturlar. Varsayılan olarak kaçan bir şablon motoruna sahip olmak güzel olurdu. Rob A'nın Zend Frameworks uygulamalarındaki kısa etiketlerden kaçmak için hızlı bir kesmek yazdığına inanıyorum. Kısa etiketleri seviyorsanız PHP'nin okunmasını kolaylaştırır. O zaman Smarty daha iyi bir seçenek olabilir mi?

{$myString|escape}

bana göre daha iyi görünüyor

<?= htmlspecialchars($myString) ?> 

10
Çoğu PHP programcısı için, ikinci seçenek birincisinden daha mantıklıdır, çünkü bildiğimiz gerçek bir PHP işlevi olduğu için, ilk seçenek PHP'nin üstünde öğrenmek zorunda olduğumuz sahte geçici koddur. PHP zaten baştan çıkarıcı bir dildir, Smarty gereksiz IMO gibi üzerine başka bir uyarlayıcı dil ekler.
Bug Magnet

3
Twig, varsayılan twig.sensiolabs.org
mateusza

3

Kısa etiketleri kullanma amacının ne olduğunu sormak gerekir.

Yazmak için daha hızlı

MDCore şunları söyledi:

<?= yazmaktan çok daha uygun <?php echo

Evet öyle. Komut dosyalarınızda 7 karakter * X kez yazmak zorunda kalmazsınız.

Ancak, bir komut dosyasının tasarlanması, geliştirilmesi ve yazılması bir saat veya 10 saat veya daha fazla zaman aldığında, komut dosyasının süresi boyunca bu 7 karakteri buraya ve oraya yazmamanın birkaç saniye süresi ne kadar önemlidir?

Kısa etiketler açık değilse veya açıksa, komut dosyalarınızın bazı çekirdek veya tümü için potansiyel ile karşılaştırıldığında, bir güncelleme veya ini dosyası / sunucu yapılandırmasını değiştiren biri çalışmayı durdurur, diğer potansiyeller.

Kazandığınız küçük fayda, potansiyel sorunların şiddetini, yani sitenizin çalışmadığını veya daha da kötüsü, yalnızca çalışmayan bölümlerini ve dolayısıyla çözümlenecek bir baş ağrısını aşmaya yaklaşmaz.

Daha kolay okunabilir

Bu aşinalığa bağlıdır .
Hep gördüm ve kullandım <?php echo. Bu yüzden <?=okunması zor olmasa da, bana tanıdık gelmiyor ve bu nedenle okunması kolay değil .

Ve ön uç / arka uç geliştirici bölünmüş (çoğu şirkette olduğu gibi) bu şablonlar üzerinde çalışan bir ön uç geliştirici "PHP açık etiketi ve yankı" eşit olduğunu bilmek daha tanıdık olurdu <?=?
Çoğunun daha mantıklı olanla daha rahat olacağını söyleyebilirim. Yani, açık bir PHP açık etiketi ve sonra ne oluyor "yankı" - <?php echo.

Risk değerlendirmesi
Sorun = tüm site veya temel komut dosyaları çalışmıyor;

Sorunun potansiyeli çok düşük + sonucun şiddeti çok yüksek = yüksek risk

Sonuç

Burada birkaç saniye tasarruf edersiniz ve orada birkaç karakter yazmak zorunda kalmazsınız, ancak bunun için çok risk alırsınız ve sonuç olarak muhtemelen okunabilirliği kaybedersiniz.

Ön veya arka uç kodlama tanıdık ile <?=daha muhtemel anlamak için <?php echostandart -, onlar standart PHP şeyler olarak <?php"eko" bilinen çok iyi açık etiketi ve.
(Ön uç kodlayıcılar bile "yankı" bilmelidir veya sadece bir çerçeve tarafından sunulan herhangi bir kod üzerinde çalışmayacaktır).

Tam tersi olası olmasa da, birisinin mantıksal olarak bir PHP kısa etiketindeki eşittir işaretinin "echo" olduğu sonucuna varması olası değildir.


Yazmayla ilgisi yok. Daha kısadır ve dolayısıyla daha kolay okunma potansiyeline sahiptir . Okuma için kullanılan bir kişi <?=okuyacak <?=okuma için kullanılan bir kişi daha kolay <?php echookuma <?php echo.
Pacerier

@Pacerier Shorter basitçe = okunması daha kolay değildir. Hepimiz farklıyız. Ne demek onun için okumak daha kolay olduğu sana . Cevabımı koyduğum gibi, <?phpkod boyunca bana birçok kez daha tanıdık geldiğini görmeye alışık olduğumdan <?=- tanıdık olmak işleri kolaylaştırır - mutlaka daha iyi olmaz.
James

Hayır, seni ve beni karşılaştırmıyorum, okumaya alışkın olan bir kişinin okumaya alışkın olandan daha iyi <?=okuyacağını söylüyorum<?=<?php echo okuma <?php echo. Bu, X kişisinin iki özdeş kopyasına sahip olduğumuz ve bunları yalnızca birinin okumaya alışık olduğu <?=ve diğerinin okumaya alışık olduğu yönüyle değiştirdiğimiz takdirde <?php echo, ilk kopya xistenen sözdizimini kullanarak okurken okunabilirlik değerini elde edebilir , ikinci kopya ise yistenilen sözdizimini okurken okunabilirlik değerine ulaşabilir x >= y.
Pacerier

Hayır, noktayı kaçırıyorsun. Belirli bir insanla hiçbir ilgisi olmayan sistemin potansiyelinden bahsediyorum. Qwerty klavyeyle yazmaya alışkın olan kişilerin qwerty ile daha hızlı yazılacağını söylerken, dvorak ile yazmaya alışkın olan insanlar dvorak ile daha hızlı yazacaklardır, ancak iki sistemin farklı potansiyele sahip olduğu gerçeği değişmez.
Pacerier

3

Kabul edelim. PHP kısa etiketleri olmadan cehennem kadar çirkin.

Aşağıdakilere erişemiyorsanız bunları bir .htaccessdosyada etkinleştirebilirsiniz php.ini:

php_flag short_open_tag on

3
Yanlış. Bazen sunucu her türlü geçersiz kılmayı reddedecek şekilde ayarlanmıştır, efendim.
Alfabravo

17
Doğru, ancak sunucunuz htaccess ile geçersiz kılmanıza izin vermiyorsa, gerçekten yeni bir ana bilgisayara ihtiyacınız var! :)
Brian Lacy

1
komut satırı arabiriminde çalışmaz ve php_flag her zaman desteklenmez
Elvis Ciotti

3

Taşınabilirlik sorunlarından kaçınmak için, PHP etiketlerini ile başlatın <?phpve PHP dosyanızın tamamen HTML olduğu, HTML olmadığı durumda, kapatma etiketlerini kullanmanıza gerek yoktur.


2
  • Sunucunun destekleyeceğinden ve geliştiricilerinizin anlayacağından emin olduğunuz durumlarda kısa etiketlerin kullanılması kabul edilebilir.
  • Birçok sunucu bunu desteklemez ve birçok geliştirici bir kez gördükten sonra anlar.
  • Taşınabilirliği sağlamak için tam etiketler kullanıyorum, çünkü o kadar da kötü değil.

Bununla birlikte, bir arkadaşım bunu, alternatif standartlaştırılmış asp tarzı etiketleri desteklemek <%yerine <?, bunun yerine , asp_tags adlı php.ini'de bir ayar olduğunu söyledi. İşte onun mantığı:

... keyfi sözleşmeler standartlaştırılmalıdır . Yani, her zaman eşit değere sahip bir dizi olasılıkla karşı karşıya kaldığımızda - programlama dilimizin kendini çizmek için kullanması gereken tuhaf noktalama işaretleri gibi - bir standart yol seçmeli ve buna bağlı kalmalıyız. Bu şekilde, tüm dillerin (ya da sözleşmenin ilgili olduğu şeyler) öğrenme eğrisini azaltıyoruz.

Bana kulağa hoş geliyor, ama hiçbirimizin vagonları bu dava etrafında toplayabileceğini sanmıyorum. Bu arada, sonuna kadar yapışırdım <?php.


2

Ben PHP 7 olarak bahsetmeye değer düşündüm:

  • Kısa ASP PHP etiketleri <% … %>kayboldu
  • Kısa PHP sekmeleri <? … ?>şu durumlarda kullanılabilirshort_open_tagTrue olarak ayarlanmışsa, . Bu varsayılan ayardır.
  • PHP 5.4'ten beri, Ayardan bağımsız olarak Kısa Yazdırma etiketleri <?=… ?>her zaman etkindir short_open_tag.

Diğer dillere müdahale ettiği için birincisine iyi kurtuluş.

Artık kişisel tercihlerin dışında kısa baskı etiketlerini kullanmamanız için hiçbir neden yok.

Tabii ki, PHP 5'in eski sürümleriyle uyumlu olacak şekilde kod yazıyorsanız, eski kurallara bağlı kalmanız gerekir, ancak PHP 5.6'dan önceki herhangi bir şeyin artık desteklenmediğini unutmayın.

Bkz. Https://secure.php.net/manual/en/language.basic-syntax.phptags.php


1
Yanılmıyorsam, ilk noktanız yanlış. Doküman, PHP etiketlerinin kısa değil, ASP etiketlerinin PHP 7.0.0'dan itibaren gittiğini söylüyor.
yeniden düzenlendi

@reformed Kesinlikle haklısın. Cevabımı düzenleyeceğim. Teşekkürler
Manngo

1

XSS'yi önemsiyorsanız <?= htmlspecialchars(…) ?>, çoğu zaman kullanmalısınız , bu nedenle kısa bir etiket büyük bir fark yaratmaz.

Eğer kısaltmak bile echo htmlspecialchars()üzere h(), bu eklemek için hatırlamak zorunda olduğu bir sorun hemen hemen her zaman (ve zararsız çıkış kullanılmayan ama-is-kaçan önceden veri kaydını, tutmaya çalışıyorum sadece hatalar daha olası hale getirir) hâlâ burada.

Varsayılan olarak güvenli ve benim için etiket yazan şablon motoru kullanıyorum <?php.


7
Kendinizi "<? Php echo htmlspecialchars ($ text, ENT_QUOTES, 'UTF-8');?> Günde 500 kez yazıyorsanız, Rails gibi" h "adlı bir kısayol işlevi oluşturmak isteyebilirsiniz .. << ? = h ($ text)?> "bir şablonu tararken çok daha okunabilir.
Alexander Malfait

1
Gerçekten daha iyidir, ancak bir şablon motoru ile sadece $ {text} veya benzeri olabilir (ve h () eklemeyi hatırlamanız gerekmez)
Kornel

7
PHP'nin kendisi cazip bir motordur. Kısa etiketleri kullanmayı bıraktığınızda, çok ayrıntılı hale geldiğinden kötü şablon motoru olmaya başlar.
Josef Sábl

1
@Alexander Malfait bu iyi bir ipucu. Ancak <? = Gerekli değildir. İşlevin dönüş yerine dizgiyi echo yapabilirsiniz, o zaman <? Php h ('merhaba')? Yazar mıyız? <? php _e ('')?> o kadar da kötü değil.
'17

1

<?php ?>Bu programlama dilinin geliştiricileri temel dillerini büyük ölçüde güncellediğinden kullanımı çok daha iyidir. Kısa etiketler ile uzun etiketler arasındaki farkı görebilirsiniz.

Kısa etiketler açık kırmızı olarak vurgulanırken, uzun etiketler daha koyu renkle vurgulanır!

Ancak, bir şeyi yankılanmak, örneğin: <?=$variable;?>gayet iyi. Ancak daha uzun etiketleri tercih edin.<?php echo $variable;?>


1

Dönüştürme <?için (bir arka boşluk bırakmadan) <?php(bir arka boşluk):

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

Dönüştürme <?için (bir arka boşluk) <?php(sonunda boşluk tutucu):

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

1

Kısa etiketi her zaman php mevcuttur. Yani betiğinizdeki ilk ifadeyi yankılamanız gerekmez

misal:

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

   ?>

Aniden tek bir php script için kullanmanız gerekir sonra u kullanabilirsiniz. misal:

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

1

2019 itibariyle burada bazı cevaplara katılmıyorum. Uzun etiketler kullanmanızı öneririm

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

veya kısa eko etiketleri

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

Sebep: PSR-1 temel kodlama standardı tarafından önerilmektedir

Gibi diğer kısa etiketler <? /* code goes here */ ?>önerilmez.

Spec diyor ki:

PHP kodu uzun etiketleri veya kısa eko etiketlerini KULLANMALIDIR; diğer etiket varyasyonlarını KULLANMAMALIDIR .


1

Php içinde 3 etiket bulunmaktadır:

  1. <?php ?>yapılandırılmış herhangi bir yönerge gerektirmeyen uzun biçimli etiket
  2. short_open_tag o <? ?> php.ini içinde short_open_tag seçenek açıksa
  3. <?= php 5.4.0 olduğundan etiketi kısaltın her zaman kullanılabilir

7.0.0 asp asp ve komut dosyası etiketi kaldırıldı


Bu soruya cevap vermiyor.
RalfFriedl

-5

Hayır, ve PHP 6 tarafından aşamalı olarak kaldırılıyorlar, bu nedenle kod ömrünü takdir ederseniz, bunları veya <% ... %>etiketleri kullanmayın.


4
Kullanımdan kaldırılmayacaklarını söyleyen diğer blog yayınlarını gördüm, sadece ASP tarzı kısa etiketler.
MDCore

22
PHP Geliştiricileri toplantısından gelen bu bağlantıya göre, bu cevabın yanlış olduğu anlaşılıyor
Charles

7
NEDEN bu kadar kötüler, neden? Herkes o kadar kendinden emin ki baaaaaad ama kimse nedenini söylemiyor.
Josef Sábl

6
YANLIŞ. Gerçekten de olması gerektiği gibi <%%> etiketlerini aşamalı olarak kaldırıyorlar. Karıştırmaktan başka bir amaca hizmet etmezler. <? ?> etiketleri etkilenmeyecek; ancak elbette yine de sunucu başına yapılandırılabilir ve hedef platformunuzun gereksinimlerinin her zaman farkında olmalısınız.
Brian Lacy

6
Bu bilgiler yanlış ve yanıltıcı görünmektedir ve yazar tarafından düzeltilmelidir.
tex
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.