Sind PHP-Kurztags akzeptabel?

522

Hier sind die Informationen gemäß der offiziellen Dokumentation :

Es gibt vier verschiedene Paare von öffnenden und schließenden Tags, die in PHP verwendet werden können. Zwei davon <?php ?> und <script language="php"> </script>sind immer verfügbar. Die anderen beiden sind kurze Tags und Tags im ASP-Stil und können über die Konfigurationsdatei php.ini ein- und ausgeschaltet werden. Während einige Leute kurze Tags und Tags im ASP-Stil als praktisch empfinden, sind sie weniger portabel und werden im Allgemeinen nicht empfohlen .

Nach meiner Erfahrung die meisten Server tun haben kurze Tags aktiviert. Tippen

<?=

ist weitaus bequemer als das Tippen

<?php echo 

Die Bequemlichkeit des Programmierers ist ein wichtiger Faktor. Warum werden sie nicht empfohlen?

MDCore
quelle
61
Um den whyTeil zu beantworten , zitiere ich den Zend PHP 5-Zertifizierungsleitfaden: "Kurze Tags waren zeitweise der Standard in der PHP-Welt; sie haben jedoch den Hauptnachteil, dass sie mit XML-Headern in Konflikt stehen, und haben daher etwas auf der Strecke geblieben. "
Fluffy
7
Was ist der Anwendungsfall, in dem dieses Problem auftritt? Bedeutet das, dass es für Entwickler schwierig ist, XML mit PHP zu generieren?
Jon z
9
Angenommen, Sie haben XML-Dokumente, die öffentlich sein sollen, aber Sie möchten, dass die Dokumente aus irgendeinem Grund PHP-analysierbar sind, sodass Sie XML von Ihrem Browser analysierbar machen. Sie verwenden kurze Tags, damit sie aktiviert werden, und plötzlich wird das XML-Dokument über die XML-Header analysiert, wodurch Probleme auftreten. Hat mich verrückt gemacht, als ich vor langer Zeit versucht habe, das herauszufinden. Seitdem Funktionscodes auf jedem Server, den ich betreibe, deaktiviert wurden und jedes Team, mit dem ich zusammengearbeitet habe, auf nicht
Kurzcode
43
Ab PHP 5.4.0 enthält die Anweisung short_open_tag nicht das kurze Echo-Tag <?= $example;?> ! Dies ist sehr wichtig, da die Verwendung aller anderen kurzen Tags als zwecklos angesehen wird. Auf jeden Fall wird die Verwendung des kurzen Echo-Tags von nun an empfohlen. Es sorgt für eine glattere und aufgeräumtere Codebasis - insb. in Ansichtsdateien. Also für PHP> = 5.4.0 <?= ?> kann verwendet werden , ohne Einstellung short_open_tag . Bitte verwenden Sie nicht die anderen kurzen Tags in Ihrem Code. Die Code-Götter werden sehr wütend, wenn Sie dies tun ...
Borislav Sabev
6
Ich werde dies als kurzen Kommentar hinzufügen, da es bereits viel zu viele lange Antworten gibt: <?Wird nicht nur in XML für die Eröffnungsdeklaration verwendet <?xml version="1.0" ?>; Dies ist die allgemeine Syntax für "Verarbeitungsanweisungen", wobei das zweithäufigste Beispiel ist <?xml-stylesheet ... ?>. <?phpkann tatsächlich als gültige Verarbeitungsanweisung angesehen werden, wie dies möglich ist <?=(wie in 5.4+ zulässig), aber die Inanspruchnahme des Ganzen führt <?auch zu unnötigen Konflikten zwischen den Syntaxen.
IMSoP

Antworten:

374

Sie werden nicht empfohlen, da es sich um eine PITA handelt, wenn Sie Ihren Code jemals auf einen Server verschieben müssen, auf dem er nicht unterstützt wird (und Sie ihn nicht aktivieren können). Wie Sie sagen, viele gemeinsamen Rechnern tun Unterstützung Short aber „viel“ ist nicht alle von ihnen. Wenn Sie Ihre Skripte freigeben möchten, verwenden Sie am besten die vollständige Syntax.

Ich bin damit einverstanden <?und <?=für Programmierer einfacher als <?phpund, <?php echoaber es ist möglich, ein Massen-Suchen und Ersetzen durchzuführen, solange Sie jedes Mal dasselbe Formular verwenden (und keine Leerzeichen einspannen (z. B.: <? phpOder <? =)).

Ich kaufe Lesbarkeit überhaupt nicht als Grund. Den meisten seriösen Entwicklern steht die Möglichkeit der Syntaxhervorhebung zur Verfügung.

Wie ThiefMaster in den Kommentaren erwähnt, werden ab PHP 5.4 <?= ... ?>Tags überall unterstützt, unabhängig von den Einstellungen für Shorttags . Dies sollte bedeuten, dass sie sicher in portablem Code verwendet werden können, aber das bedeutet, dass dann eine Abhängigkeit von PHP 5.4+ besteht. Wenn Sie Pre-5.4 unterstützen möchten und keine Shorttags garantieren können, müssen Sie diese weiterhin verwenden <?php echo ... ?>.

Außerdem müssen Sie wissen, dass ASP-Tags <%,%>, <% = und Skript-Tags aus PHP 7 entfernt werden . Wenn Sie also langfristigen tragbaren Code unterstützen möchten und zu den modernsten Tools wechseln möchten, sollten Sie diese Teile des Codes ändern.

Oli
quelle
91
Die Erklärung lautet also: Sie sind schlecht, weil sie nicht unterstützt werden? Aber warum werden sie nicht unterstützt? Weil sie nicht Teil der Spezifikation sind? Ok, aber warum sind sie nicht Teil der Spezifikation? Ich bin etwas enttäuscht von dieser Antwort.
Josef Sábl
61
Ich bin nicht hier, um die "großen Fragen" zu diskutieren, wie warum wir hier sind, wie alles begann usw. Die Shorttag-Unterstützung ist auf gemeinsam genutzten Servern nicht garantiert und wird in der nächsten Hauptversion vollständig entfernt. Das ist alles was Sie wissen müssen.
Oli
39
Obligatorisches PHP ist eine Template-Engine. : P
Syntaxfehler
49
Kurze Tags werden nicht auslaufen. Nur kurze Tags im ASP-Stil.
Brian Lacy
46
In der (sehr nahen) Zukunft von PHP 5.4 wird die Verwendung von <? = Davon getrennt, ob short_open_tags aktiviert oder deaktiviert sind. <? = wird nicht auslaufen, im Gegenteil, es wird jetzt als grundlegendes Stück der Sprache angesehen.
Herr Griever
175

Ich bin zu gern <?=$whatever?>, um es loszulassen. Hatte nie ein Problem damit. Ich werde warten, bis es mich in den Arsch beißt. In aller Ernsthaftigkeit haben 85% der (meiner) Kunden in den seltenen Fällen, in denen sie ausgeschaltet sind, Zugriff auf php.ini . Die anderen 15% nutzen Mainstream-Hosting-Anbieter, und praktisch alle haben sie aktiviert. Ich liebe sie.

Paolo Bergantino
quelle
41
@B Seven Wenn Sie versuchen, jedes theoretische Problem zu vermeiden, das auftreten könnte, ist Ihr Code mit ziemlicher Sicherheit ineffizient und fehlerhaft. Bis die PHP-Gruppe zustimmt, kurze Tags auslaufen zu lassen [keine ASP-Tags], ist die Sorge, gebissen zu werden, weitaus geringer und die mögliche Lösung weitaus einfacher als bei anderen Dingen, die Sie Ihre Zeit "reparieren" können.
SamGoody
18
Wenn es Sie beißt, wechseln Sie zu einem besseren Hosting
Lie Ryan
4
Ich bin nicht wirklich damit einverstanden, etwas nicht zu verwenden, da es möglicherweise nicht unterstützt wird. Sollten wir keine der anderen Funktionen verwenden, die auf einem Server möglicherweise nicht unterstützt werden? MYSQL vs MYSQLI? Sie werden Ihre Zeit nach und nach verschwenden und immer wieder lange Tags schreiben, um eine winzige Chance zu vermeiden, ein wenig Zeit damit zu verbringen, zu einem besseren Host zu wechseln.
Dean oder
2
@BSeven, Meinst du, du verwendest keine PHP-Erweiterungen außer den standardmäßig gelieferten?
Pacerier
143

Ab PHP 5.4 ist die Echo-Verknüpfung ein von Short-Tags getrenntes Problem, da die Echo-Verknüpfung immer aktiviert ist. Es ist jetzt eine Tatsache:

Die Echo-Verknüpfung selbst ( <?=) kann jetzt sicher verwendet werden.

dukeofgaming
quelle
19
Ich würde sagen, dies ist das einzige "Short-Tag", das benötigt wird. <?phpkann am Anfang aller Klassendateien verwendet werden, und dann haben Sie <?=für Ihre Ansichten. Win-Win.
Xeoncross
6
So the echo shortcut itself (<?=) is safe to use... solange Sie PHP 5.4 benötigen. Weit verbreitete PHP-Apps (wie WordPress) haben nicht den Luxus, 5.4 zu benötigen, und bieten sogar bis 2011 PHP 4-Unterstützung an - volle 7 Jahre nach der Veröffentlichung von PHP 5. Wenn Sie sich an einem Ort wie Facebook befinden, an dem alle Installationen Ihrer Software direkt vom Unternehmen selbst ausgeführt werden, ist es viel einfacher, 5.4-Support zu benötigen, als wenn Sie an einem Projekt wie WordPress arbeiten.
Frank Farmer
@dukeofgaming, Wow, guter Fang, wusste nicht, dass ihre SVN-Revisionen im Web verfügbar sind.
Pacerier
82

Das Problem bei dieser ganzen Diskussion liegt in der Verwendung von PHP als Vorlagensprache. Niemand argumentiert, dass Tags in Anwendungsquelldateien verwendet werden sollten.

Die einbettbare Syntax von PHP ermöglicht jedoch die Verwendung als leistungsstarke Vorlagensprache, und Vorlagen sollten so einfach und lesbar wie möglich sein. Viele haben es einfacher gefunden, eine viel langsamere Add-On-Template-Engine wie Smarty zu verwenden, aber für Puristen unter uns, die schnelles Rendern und eine reine Codebasis fordern, ist PHP die einzige Möglichkeit, Vorlagen zu schreiben.

Das EINZIGE gültige Argument GEGEN die Verwendung von kurzen Tags ist, dass sie nicht auf allen Servern unterstützt werden. Kommentare zu Konflikten mit XML-Dokumenten sind lächerlich, da Sie PHP und XML wahrscheinlich sowieso nicht mischen sollten. und wenn ja, sollten Sie PHP verwenden, um Textzeichenfolgen auszugeben. Sicherheit sollte niemals ein Problem sein, denn wenn Sie vertrauliche Informationen wie Anmeldeinformationen für den Datenbankzugriff in Vorlagendateien einfügen, treten größere Probleme auf!

Was nun die Serverunterstützung betrifft, muss man sich zugegebenermaßen ihrer Zielplattform bewusst sein. Wenn Shared Hosting ein wahrscheinliches Ziel ist, sollten kurze Tags vermieden werden. Für viele professionelle Entwickler (wie mich) erkennt der Client jedoch an (und hängt tatsächlich davon ab), dass wir die Serveranforderungen diktieren werden. Oft bin ich dafür verantwortlich, den Server selbst einzurichten.

Und wir arbeiten NIEMALS mit einem Hosting-Anbieter zusammen, der uns keine absolute Kontrolle über die Serverkonfiguration gibt. In einem solchen Fall könnten wir uns darauf verlassen, dass wir viel mehr Probleme haben, als nur die Unterstützung für kurze Tags zu verlieren. Es passiert einfach nicht.

Also ja - ich stimme zu, dass die Verwendung von kurzen Tags sorgfältig abgewogen werden sollte. Ich bin aber auch der festen Überzeugung, dass dies IMMER eine Option sein sollte und dass ein Entwickler, der sich seiner Umgebung bewusst ist, sich frei fühlen sollte, sie zu verwenden.

Brian Lacy
quelle
6
Wenn Sie aus irgendeinem Grund Apache eingerichtet hätten, um XML-Dateien an mod_php zu übergeben, wäre das <? Xml-Ding Kopfschmerzen mit kurzen Tags. Aber das ist offensichtlich ein bizarres Setup.
Frank Farmer
3
Eine Vorlagensprache , die ohne Problemumgehungen nicht in einige Arten von Ausgabedokumenten eingebettet werden kann, ist ein großer Fehler. Der einzige Grund, warum ich keine XML-Vorlage mit PHP-Code und kurzen Tags haben sollte, ist, dass es nicht funktioniert, nicht weil es keinen Sinn ergibt.
Vinko Vrsalovic
8
Es ist kein "großer Fehler", die Vorteile von PHP als schnelle und bequeme Vorlagensprache zu nutzen. Wie ich bereits sagte, geht es darum, die Vor- und Nachteile abzuwägen und Code so zu schreiben, dass er Ihrem gewählten Ansatz entspricht. Verwerfen Sie einen gültigen Ansatz nicht kategorisch, nur weil er in einem bestimmten Szenario nicht funktioniert (was leicht umgangen werden kann).
Brian Lacy
5
Ich lehne keinen gültigen Ansatz kategorisch ab (siehe meine Antwort auf die Frage). Sie sind derjenige, der PHP in XML kategorisch ablehnt. Ich zitiere: "Sie sollten PHP und XML sowieso nicht mischen." Der große Fehler, auf den ich mich bezog, war auch die Entscheidung, <?ein kurzes Tag zu verwenden, da dies zu hässlichen Problemumgehungen für XML führt. Trotzdem stimme ich zu, dass es darum geht, Vor- und Nachteile abzuwägen, und dass Sie es mit Sicherheit tun können, wenn Sie wissen, was Sie tun. Dies ist jedoch keine <?gute Wahl.
Vinko Vrsalovic
3
Ich bin etwas spät zur Party, aber ich mag diese Antwort wirklich und sie spiegelt meine Erfahrung mit der Situation wider. Obwohl wir in unserem Büro einige Meinungsverschiedenheiten zu diesem Thema haben, kann ich sagen, dass ich bei der fast täglichen Arbeit in PHP seit vielen Jahren nie auf dieses Problem gestoßen bin. Wenn PHP zum Generieren von XML verwendet wird, war es meiner Erfahrung nach immer im Zusammenhang mit hochdynamischen Inhalten, die nie direkt über PHP erstellt wurden, sodass das Problem einfach nie auftritt.
Redreinard
33

Kurze Tags kehren zurück, da Zend Framework " PHP als Vorlagensprache " in der Standard-MVC-Konfiguration verwendet . Ich verstehe nicht, worum es in der Debatte geht. Der größte Teil der Software, die Sie während Ihres Lebens produzieren, wird auf einem Server ausgeführt, den Sie oder Ihr Unternehmen kontrollieren werden. Solange Sie sich konsequent halten, sollte es keine Probleme geben.

AKTUALISIEREN

Nach einigem Arbeiten mit Magento , das Langform verwendet. Infolgedessen habe ich auf die Langform umgestellt:

<?php and <?php echo

Über

<? and <?=

Scheint ein kleiner Arbeitsaufwand zu sein, um die Interoperabilität sicherzustellen.

Jake McGraw
quelle
8
Ich bin freiberuflich tätig und mein gesamter Code wird auf Shared Hosting übertragen, also überhaupt keine Kontrolle! :)
MDCore
12
Wenn genügend Kunden zu Ihrem eigenen Coloc wechseln, ist Shared Hosting unsicher und instabil.
Jake McGraw
2
Die kurzen Tags, die Zend zurückbrachte, haben sich anscheinend nicht durchgesetzt, da Zend die lange Version verwendet: framework.zend.com/manual/en/zend.view.scripts.html
Gerry
3
@Gerry Ich habe dies auch kürzlich gelesen, siehe den letzten Kommentar zu diesem Thread: Update .htaccess, um kurze offene Tags zu aktivieren
MrWhite
2
Sie sollten die Grammatik im ersten Satz nach UPDATE wirklich korrigieren, was in der aktuellen Form keinen Sinn ergibt.
Redreinard
22

Wegen der Verwirrung, die es mit XML-Deklarationen erzeugen kann. Viele Leute stimmen mit Ihnen, though.

Ein weiteres Problem ist der Schmerz, den es verursachen würde, alles mit kurzen Tags zu codieren, um am Ende herauszufinden, dass der endgültige Hosting-Server sie ausgeschaltet hat ...

Vinko Vrsalovic
quelle
Verursacht die XML-Deklaration nicht trotzdem Verwirrung, wenn short_tags aktiviert ist?
MDCore
Anstatt die XML-Deklaration direkt auszugeben, muss PHP sie wiedergeben. Es ist nicht wirklich eine gute Widerlegung.
Moo
Es ist keine Widerlegung von irgendetwas. Es ist der einzige tatsächliche Grund, der wiederum die Ursache für den anderen Grund ist, warum "Hoster es ausschaltet". Natürlich können Sie es verwenden, wenn Sie wissen, was Sie tun, wie immer.
Vinko Vrsalovic
1
@macek: Das ist mir bewusst. Es war nur das erste Beispiel, an das ich dachte. Was ist, wenn Sie PHP in eine XML-Datei einbetten? Das kann man nicht direkt machen. Und sag mir auch nicht die Lösung für dieses Problem, ich bin mir ihrer bewusst. Der Punkt ist, dass es für PHP viele Möglichkeiten gibt, eine XML-Datei zu analysieren. Sie können sie wahrscheinlich alle mit Problemumgehungen ( <?='<?xml') oder mit den Worten "Sie sollten das nicht tun" schließen, aber das lässt die Tatsache, dass dies passieren kann, nicht verschwinden.
Vinko Vrsalovic
1
Wie sind kurze Tags ein Schmerz, wenn sie nicht funktionieren? sein ist sehr einfach , eine Masse und ersetzen zu tun <?=mit <? echo . Viele Texteditoren können dies problemlos für Tausende von Dateien gleichzeitig tun.
Yamiko
20

Es folgt das wunderbare Flussdiagramm desselben:

Entscheidungsbaum der Verwendung von <? =

Quelle: Ähnliche Frage zu Software Engineering Stack Exchange

Sumoanand
quelle
2
Dies beschreibt, ob das kurze Echo-Tag verwendet werden soll, nicht dasselbe wie die <?in der Frage erwähnten kurzen Tags (obwohl es die gleiche Konfigurationseinstellung vor 5.4 verwendet hat)
Alok
Tatsächlich sollte dies eine Antwort sein, die jeder verstehen kann, obwohl die Umstände nicht wirklich erklärt werden, warum Sie in vielen Fällen keine kurzen Tags verwenden möchten (z. B. nicht in der Lage, die Datei php.ini auf einem gemeinsam genutzten Hosting-System zu ändern)
Björn K.
14

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php bietet zahlreiche Ratschläge, darunter:

Während einige Leute kurze Tags und Tags im ASP-Stil als praktisch empfinden, sind sie weniger portabel und werden im Allgemeinen nicht empfohlen.

und

Beachten Sie, dass Sie beim Einbetten von PHP in XML oder XHTML die <?php ?>Tags verwenden müssen, um den Standards zu entsprechen.

und

Die Verwendung kurzer Tags sollte vermieden werden, wenn Anwendungen oder Bibliotheken entwickelt werden, die für die Umverteilung oder Bereitstellung auf PHP-Servern vorgesehen sind, die nicht unter Ihrer Kontrolle stehen, da kurze Tags auf dem Zielserver möglicherweise nicht unterstützt werden. Verwenden Sie für tragbaren, weiterverteilbaren Code keine kurzen Tags.

Oliver Charlesworth
quelle
14

Für den Fall, dass noch jemand darauf achtet ... Ab PHP 5.4.0 ist Alpha 1 <?=immer verfügbar:

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

Es sieht also so aus, als wären kurze Tags (a) akzeptabel und (b) hier, um zu bleiben. Vorerst zumindest ...

James Alday
quelle
5
<?=wird ab 5.4
T0xicCode vom
12
  • Kurze Tags sind in einigen Webservern (gemeinsam genutzte Hosts usw.) nicht standardmäßig aktiviert, sodass die Code-Portabilität zu einem Problem wird, wenn Sie zu einem dieser Tags wechseln müssen.

  • Die Lesbarkeit kann für einige ein Problem sein. Viele Entwickler stellen möglicherweise fest, dass dies <?phpals offensichtlicherer Marker für den Beginn eines Codeblocks auffällt als <?beim Scannen einer Datei, insbesondere wenn Sie an einer Codebasis festhalten, in der HTML und PHP eng miteinander verwoben sind.

ConroyP
quelle
2
Kurze Tags sind in 95% der Webserver aktiviert.
Paolo Bergantino
19
Ich kaufe das Argument "Lesbarkeit" nicht. Wenn Sie PHP als Vorlagensprache verwenden, <?= $var ?>ist es viel besser lesbar als<?php echo $var ?>
Frank Farmer
2
@Paulo Dies hat sich möglicherweise seit '08 geändert, aber bei EC2-Ubuntu- und Fedora-Instanzen mit yum install- und apt-get-Versionen von PHP ist das Short-Tagging standardmäßig deaktiviert
Doug Molineux
2
Verwenden Sie vollständige Tags und Sie haben 100% :)
Elvis Ciotti
1
@FrankFarmer, ich denke er vergleicht den ohne Echo. <?vs <?php.
Pacerier
11

Hinweis: Ab PHP 5.4 ist das kurze Tag <?=immer verfügbar.

Brunoais
quelle
5

Ich habe diese Seite gelesen, nachdem ich nach Informationen zum Thema gesucht habe, und ich habe das Gefühl, dass ein Hauptproblem nicht erwähnt wurde: Faulheit vs. Konsistenz. Die "echten" Tags für PHP sind <? Php und?>. Warum? Es ist mir eigentlich egal. Warum sollten Sie etwas anderes verwenden wollen, wenn diese eindeutig für PHP sind? <% und%> bedeuten für mich ASP und <script ..... bedeutet Javascript (in den meisten Fällen). Halten Sie sich also für Konsistenz, schnelles Lernen, Portabilität und Einfachheit an den Standard.

Andererseits stimme ich zu, dass kurze Tags in Vorlagen (und NUR in Vorlagen) nützlich erscheinen, aber das Problem ist, dass wir gerade so viel Zeit damit verbracht haben, darüber zu diskutieren, dass es wahrscheinlich sehr lange dauern würde, bis sie tatsächlich verschwendet wurden so viel Zeit, die zusätzlichen drei Zeichen von "php" einzugeben !!

Viele Optionen zu haben ist zwar nett, aber überhaupt nicht logisch und kann Probleme verursachen. Stellen Sie sich vor, jede Programmiersprache erlaubt 4 oder mehr Arten von Tags: Javascript könnte <JS oder <script .... oder <% oder <sein? JS .... wäre das hilfreich? Im Fall von PHP tendiert die Parsing-Reihenfolge dazu, diese Dinge zuzulassen, aber die Sprache ist in vielerlei Hinsicht nicht flexibel: Sie wirft Hinweise oder Fehler auf die geringste Inkonsistenz, dennoch werden häufig kurze Tags verwendet. Und wenn kurze Tags auf einem Server verwendet werden, der sie nicht unterstützt, kann es sehr lange dauern, um herauszufinden, was falsch ist, da in einigen Fällen kein Fehler angegeben wird.

Schließlich glaube ich nicht, dass kurze Tags hier das Problem sind: Es gibt nur zwei logische Typen von PHP-Codeblöcken: 1) regulären PHP-Code, 2) Vorlagenechos. Für erstere glaube ich fest daran, dass nur <? Php und?> Erlaubt werden sollten, um alles konsistent und portabel zu halten. Für letztere ist die Methode <? = $ Var?> Hässlich. Warum muss es so sein? Warum nicht etwas viel logischeres hinzufügen? <? php $ var?> Das würde nichts bewirken (und nur in den entferntesten Möglichkeiten könnte es mit etwas in Konflikt stehen), und das könnte leicht die umständliche <? = Syntax ersetzen. Oder wenn das ein Problem ist, könnten sie stattdessen <? Php = $ var?> Verwenden und sich keine Sorgen über Inkonsistenzen machen.

An dem Punkt, an dem es 4 Optionen für das Öffnen und Schließen von Tags und das zufällige Hinzufügen eines speziellen "Echo" -Tags gibt, kann PHP auch ein "Benutzerdefiniertes Öffnen / Schließen von Tags" -Flag in php.ini oder .htaccess haben. Auf diese Weise können Designer die auswählen, die ihnen am besten gefällt. Aber aus offensichtlichen Gründen ist das übertrieben. Warum also 4+ Optionen zulassen?

Daniel Ross
quelle
4

Es ist gut, sie zu verwenden, wenn Sie mit einem MVC-Framework oder CMS arbeiten, das separate Ansichtsdateien hat.
Es ist schnell, weniger Code, nicht verwirrend für die Designer. Stellen Sie einfach sicher, dass Ihre Serverkonfiguration die Verwendung dieser zulässt.

Greg
quelle
4

Eine etwas andere Situation ist die Entwicklung einer CodeIgniter- Anwendung. CodeIgniter scheint die Shorttags zu verwenden, wenn PHP in einer Vorlage / Ansicht verwendet wird, andernfalls werden bei Modellen und Controllern immer die langen Tags verwendet. Es ist keine feste Regel im Framework, aber zum größten Teil folgt das Framework und ein Großteil der Quelle aus anderen Verwendungen dieser Konvention.

Meine zwei Cent? Wenn Sie den Code nie woanders ausführen möchten, verwenden Sie ihn, wenn Sie möchten. Ich würde lieber nicht massiv suchen und ersetzen müssen, wenn mir klar wird, dass es eine blöde Idee war.

patricksweeney
quelle
4

<?ist in neueren Versionen standardmäßig deaktiviert. Sie können dies wie beschrieben aktivieren. Aktivieren von Short Tags in PHP .

AnkTech Devops
quelle
Es ist standardmäßig auch in älteren Versionen deaktiviert, nicht wahr?
Pacerier
3

IMHO-Leute, die kurze Tags verwenden, vergessen oft, dem zu entkommen, was sie wiedergeben. Es wäre schön, eine Vorlagen-Engine zu haben, die standardmäßig ausgeblendet wird. Ich glaube, Rob A hat einen schnellen Hack geschrieben, um kurzen Tags in Zend Frameworks-Apps zu entgehen. Wenn Sie kurze Tags mögen, weil dies das Lesen von PHP erleichtert. Dann könnte Smarty eine bessere Option sein?

{$myString|escape}

für mich sieht das besser aus als

<?= htmlspecialchars($myString) ?> 
Adrian Judd
quelle
10
Für die meisten PHP-Programmierer ist die zweite Option sinnvoller als die erste, einfach weil es sich um eine tatsächliche PHP-Funktion handelt, mit der wir vertraut sind, während die erste Option Pseudo-Template-Code ist, den wir zusätzlich zu PHP lernen müssen. PHP ist bereits eine Vorlagensprache und fügt eine weitere Vorlagensprache hinzu, als wäre Smarty IMO redundant.
Bug Magnet
3
Twig ist eine Template-Engine, deren HTML- Escape
mateusza
3

Man muss sich fragen, wozu kurze Tags gut sind.

Schneller zu tippen

MDCore sagte:

<?= ist weitaus bequemer als das Tippen <?php echo

Ja, so ist es. Sie müssen 7 Zeichen * X-mal in Ihre Skripte eingeben.

Wenn ein Skript jedoch eine Stunde oder 10 Stunden oder länger zum Entwerfen, Entwickeln und Schreiben benötigt, wie relevant sind die wenigen Sekunden, in denen diese 7 Zeichen für die Dauer des Skripts nicht hier und da eingegeben werden?

Verglichen mit dem Potenzial für einige oder alle Kernskripte, die nicht funktionieren, wenn kurze Tags nicht aktiviert sind oder aktiviert sind, aber ein Update oder jemand, der die INI-Datei- / Serverkonfiguration ändert, funktioniert sie nicht mehr, andere Potenziale.

Der geringe Nutzen, den Sie erzielen, überwiegt nicht annähernd die Schwere der potenziellen Probleme, dh Ihre Website funktioniert nicht oder schlimmer noch, nur Teile davon funktionieren nicht und es sind Kopfschmerzen zu lösen.

Einfacher zu lesen

Dies hängt von der Vertrautheit ab .
Ich habe immer gesehen und benutzt <?php echo. Obwohl <?=es nicht schwer zu lesen ist, ist es mir nicht vertraut und daher nicht einfacher zu lesen .

Und mit Front-End / Back-End-Entwickler-Split (wie bei den meisten Unternehmen) wäre ein Front-End-Entwickler, der an diesen Vorlagen arbeitet, vertrauter, wenn er weiß , dass dies <?=gleichbedeutend mit "PHP Open Tag and Echo" ist?
Ich würde sagen, die meisten würden sich mit dem logischeren wohler fühlen. Das heißt, ein klares PHP Open Tag und dann was passiert "Echo" - <?php echo.

Risikobewertung
Problem = Die gesamte Site oder die Kernskripte funktionieren nicht.

Das Problempotential ist sehr gering + der Schweregrad des Ergebnisses ist sehr hoch = hohes Risiko

Fazit

Sie sparen hier und da ein paar Sekunden, müssen nicht ein paar Zeichen eingeben, riskieren aber viel dafür und verlieren wahrscheinlich auch die Lesbarkeit.

Front- oder Back - End - Programmierer vertraut mit <?=eher zu verstehen <?php echo, wie sie sind Standard PHP Dinge - Standard <?phpoffen Tag und sehr gut bekannt „Echo“.
(Selbst Front-End-Codierer sollten "Echo" kennen, oder sie arbeiten einfach nicht an Code, der von einem Framework bereitgestellt wird.)

Während das Gegenteil nicht so wahrscheinlich ist, ist es unwahrscheinlich, dass jemand logisch ableitet, dass das Gleichheitszeichen auf einem PHP-Short-Tag "Echo" ist.

James
quelle
Es hat nichts mit Tippen zu tun. Es ist kürzer und kann daher leichter gelesen werden . Eine Person, die an Lesen <?=gewöhnt ist, liest <?=leichter als eine Person, die an Lesen <?php echogewöhnt ist <?php echo.
Pacerier
@Pacerier Shorter ist nicht einfach = leichter zu lesen. Wir sind alle verschieden. Was Sie meinen ist, es ist einfacher für Sie zu lesen . Wie ich in meiner Antwort angegeben habe, ist es mir gewohnt zu <?phpsehen, dass mir der gesamte Code oft vertrauter ist als <?=- Vertrautheit macht die Dinge einfacher - aber nicht unbedingt besser.
James
Nein, ich vergleiche dich und mich nicht, ich sage, eine Person, die an Lesen <?=gewöhnt ist, liest <?=besser als eine Person, die an Lesen <?php echogewöhnt ist <?php echo. Das heißt, wenn wir zwei identische Kopien von Person X haben und diese nur in dem Aspekt ändern, in dem eine zum Lesen <?=und die andere zum Lesen verwendet wird <?php echo, kann die erste Kopie xbeim Lesen mit ihrer gewünschten Syntax den Lesbarkeitswert erreichen. wohingegen die zweite Kopie ybeim Lesen seiner gewünschten Syntax einen Lesbarkeitswert erreichen kann , wobei x >= y.
Pacerier
Nein, du verpasst den Punkt. Ich beziehe mich auf das Potenzial des Systems, das nichts mit einer bestimmten Person zu tun hat. Man kann sagen, dass Leute, die mit der QWERTY-Tastatur tippen, mit QWERTY schneller tippen, während Leute, die mit Dvorak tippen, mit Dvorak schneller tippen, aber die Tatsache ändert nichts daran, dass die beiden Systeme unterschiedliche Potenziale haben.
Pacerier
3

Seien wir ehrlich. PHP ist höllisch hässlich ohne kurze Tags.

Sie können sie in einer .htaccessDatei aktivieren, wenn Sie nicht zu Folgendem gelangen php.ini:

php_flag short_open_tag on
Jimmer
quelle
3
Falsch. Manchmal ist der Server so eingestellt, dass er jegliches Überschreiben verweigert, Sir.
Alfabravo
17
Stimmt, aber wenn Ihr Host es Ihnen nicht erlaubt, mit htaccess zu überschreiben, brauchen Sie wirklich einen neuen Host! :)
Brian Lacy
1
funktioniert nicht auf der Kommandozeilenschnittstelle und php_flag wird nicht immer unterstützt
Elvis Ciotti
3

Um Portabilitätsprobleme zu vermeiden, starten Sie PHP-Tags mit <?phpund falls Ihre PHP-Datei nur PHP und kein HTML ist, müssen Sie die schließenden Tags nicht verwenden.

Kumar
quelle
2
  • Kurze Tags können verwendet werden, wenn Sie sicher sind, dass der Server sie unterstützt und Ihre Entwickler sie verstehen.
  • Viele Server unterstützen es nicht und viele Entwickler werden es verstehen, nachdem sie es einmal gesehen haben.
  • Ich verwende vollständige Tags, um die Portabilität sicherzustellen, da es wirklich nicht so schlimm ist.

Vor diesem Hintergrund sagte dies ein Freund von mir, um alternative standardisierte Tags im Asp-Stil zu unterstützen, wie <%eher als <?, was eine Einstellung in php.ini namens asp_tags ist. Hier ist seine Argumentation:

... willkürliche Konventionen sollten standardisiert werden . Das heißt, jedes Mal, wenn wir mit einer Reihe von Möglichkeiten konfrontiert sind, die alle gleichwertig sind - wie zum Beispiel, welche seltsame Interpunktion unsere Programmiersprache verwenden sollte, um sich abzugrenzen -, sollten wir einen Standardweg wählen und dabei bleiben. Auf diese Weise reduzieren wir die Lernkurve aller Sprachen (oder was auch immer die Konvention betrifft).

Hört sich gut an, aber ich glaube, keiner von uns kann die Wagen um diese Sache herum kreisen. In der Zwischenzeit würde ich mich voll daran halten <?php.

Stereoscott
quelle
2

Ich fand es ab PHP 7 erwähnenswert:

  • Kurze ASP-PHP-Tags <% … %> sind weg
  • Kurze PHP-Registerkarten <? … ?>sind weiterhin verfügbar, wenn short_open_tagtrue festgelegt ist. Dies ist die Standardeinstellung.
  • Seit PHP 5.4, Short Print - Tags <?=… ?>sind immer aktiviert, unabhängig von der short_open_tagEinstellung.

Gute Befreiung von der ersten, da sie andere Sprachen störte.

Es gibt jetzt keinen Grund mehr, die kurzen Drucketiketten zu verwenden, abgesehen von persönlichen Vorlieben.

Wenn Sie Code schreiben, der mit älteren Versionen von PHP 5 kompatibel ist, müssen Sie sich natürlich an die alten Regeln halten. Beachten Sie jedoch, dass alles vor PHP 5.6 nicht mehr unterstützt wird.

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

Manngo
quelle
1
Wenn ich mich nicht irre, ist Ihr erster Punkt falsch. Das Dokument sagt, dass ASP-Tags, keine kurzen PHP-Tags, ab PHP 7.0.0 weg sind.
Reformiert
@reformed Du bist absolut korrekt. Ich werde meine Antwort bearbeiten. Vielen Dank
Manngo
1

Wenn Sie sich für XSS interessieren , sollten Sie verwenden<?= htmlspecialchars(…) ?> meiste Zeit verwenden, damit ein kurzes Tag keinen großen Unterschied macht.

Auch wenn Sie verkürzen echo htmlspecialchars()zuh() ist es immer noch ein Problem, dass Sie daran denken müssen, es fast jedes Mal hinzuzufügen (und der Versuch, zu verfolgen, welche Daten vor dem Escapezeichen liegen, was nicht entkommen, aber harmlos ist, macht Fehler nur wahrscheinlicher).

Ich verwende eine Vorlagen-Engine , die standardmäßig sicher ist und <?phpTags für mich schreibt .

Kornel
quelle
7
Wenn Sie "<? Php echo htmlspecialchars ($ text, ENT_QUOTES, 'UTF-8');?> 500 Mal am Tag eingeben, möchten Sie möglicherweise eine Verknüpfungsfunktion mit dem Namen" h "erstellen, wie dies Rails getan hat." < ? = h ($ text)?> "ist beim Scannen einer Vorlage viel besser lesbar.
Alexander Malfait
1
Es ist in der Tat besser, aber mit einer Template-Engine kann es einfach $ {text} oder so sein (und Sie müssen nicht daran denken, h () hinzuzufügen)
Kornel
7
PHP selbst ist eine Template-Engine. Wenn Sie keine kurzen Tags mehr verwenden, wird die Template-Engine schlecht, da sie zu ausführlich wird.
Josef Sábl
1
@ Alexander Malfait das ist ein guter Tipp. Aber das <? = Wird nicht benötigt. Sie können die Funktion einfach dazu bringen, den String wiederzugeben, anstatt zurückzukehren. Dann schreiben Sie <? Php h ('hallo')?> Tun wir das nicht schon, wenn wir i18n de? <? php _e ('')?> ist nicht so schlimm.
VladFr
1

<?php ?>sind viel besser zu bedienen, da Entwickler dieser Programmiersprache ihre Kernsprache massiv aktualisiert haben. Sie können den Unterschied zwischen kurzen und langen Tags erkennen.

Kurze Tags werden hellrot hervorgehoben, während die längeren dunkler hervorgehoben werden!

Zum Beispiel etwas wiederzugeben: <?=$variable;?>ist in Ordnung. Aber bevorzugen Sie die längeren Tags.<?php echo $variable;?>

M50Scripts
quelle
1

Konvertieren <?(ohne nachfolgendes Leerzeichen) in <?php(mit nachfolgendem Leerzeichen):

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

Konvertieren Sie <?(mit einem nachgestellten Leerzeichen) in <?php(unter Beibehalten des nachfolgenden Leerzeichens):

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

Short Tag sind immer in PHP verfügbar. Sie müssen also nicht die erste Anweisung in Ihrem Skript wiederholen

Beispiel:

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

   ?>

Plötzlich müssen Sie für ein einzelnes PHP-Skript verwenden, dann können Sie es verwenden. Beispiel:

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

Ab 2019 bin ich mit bestimmten Antworten hier nicht einverstanden. Ich empfehle lange Tags zu verwenden

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

oder kurze Echo-Tags

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

Grund: Sie werden vom PSR-1-Grundcodierungsstandard empfohlen

Andere kurze Tags wie <? /* code goes here */ ?>werden nicht empfohlen.

Die Spezifikation sagt:

PHP-Code MUSS die Long-Tags oder die Short-Echo-Tags verwenden. Die anderen Tag-Variationen dürfen NICHT verwendet werden .

Blackbam
quelle
1

3 Tags sind in PHP verfügbar:

  1. Langform-Tag, <?php ?>für das keine konfigurierten Anweisungen erforderlich sind
  2. short_open_tag, das <? ?> verfügbar ist, wenn die Option short_open_tag in der php.ini aktiviert ist
  3. Tag kürzen <?= seit PHP 5.4.0 ist es immer verfügbar

von PHP 7.0.0 werden Asp und Script Tag entfernt

GaziAnis
quelle
Das beantwortet die Frage nicht.
RalfFriedl
-5

Nein, und sie werden von PHP 6 auslaufen gelassen. Wenn Sie also die Langlebigkeit des Codes schätzen, verwenden Sie sie oder die <% ... %>Tags einfach nicht .

coderGeek
quelle
4
Ich habe andere Blog-Beiträge gesehen, die besagen, dass sie nicht veraltet sein werden, nur die kurzen Tags im ASP-Stil.
MDCore
22
Es sieht so aus, als ob diese Antwort falsch ist, laut diesem Link vom PHP Developers Meeting: php.net/~derick/…
Charles
7
WARUM sind sie so schlimm, warum? Jeder ist so selbstbewusst, dass er baaaaaad ist, aber niemand sagt warum.
Josef Sábl
6
FALSCH. Sie setzen <%%> -Tags aus, wie sie es eigentlich sollten. Sie dienen keinem anderen Zweck als zu verwirren. Die <? ?> Tags sind nicht betroffen; Natürlich können sie weiterhin pro Server konfiguriert werden, und Sie sollten immer die Anforderungen Ihrer Zielplattform kennen.
Brian Lacy
6
Diese Informationen scheinen falsch und irreführend zu sein und sollten vom Autor korrigiert werden.
Tex