it-swarm.com.de

Können PHP kurze Tags verwendet werden?

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 Short-Tags und ASP style-Tags und können in der Konfigurationsdatei php.ini ein- und ausgeschaltet werden. Als solche finden manche Leute Short-Tags und ASP style-Tags sind praktisch, weniger portabel und im Allgemeinen nicht zu empfehlen .

Nach meiner Erfahrung haben die meisten Server do 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?

517
MDCore

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, unterstützen viele Shared Hosts do Shorttags, aber "viele" sind nicht alle. Wenn Sie Ihre Skripte freigeben möchten, verwenden Sie am besten die vollständige Syntax.

I stimme zu <? und <?= sind für Programmierer einfacher als <?php und <?php echo aber es ist möglich, ein Bulk-Suchen und -Ersetzen durchzuführen, solange Sie jedes Mal dasselbe Formular verwenden (und keine Leerzeichen eingeben (z. B .: <? php oder <? =)

Ich kaufe Lesbarkeit überhaupt nicht als Grund. Den meisten ernsthaften Entwicklern steht die Option zur Syntaxhervorhebung zur Verfügung.

Wie ThiefMaster in den Kommentaren erwähnt, ab PHP 5.4, <?= ... ?> Tags werden unabhängig von den Shorttags-Einstellungen überall unterstützt.. Dies sollte bedeuten, dass sie sicher in portablem Code verwendet werden können. Dies bedeutet jedoch, dass eine Abhängigkeit von PHP 5.4+ besteht. Wenn Sie Vorgängerversionen von 5.4 unterstützen möchten und Shorttags nicht garantieren können, müssen Sie dies tun brauche noch <?php echo ... ?>.

Außerdem müssen Sie wissen, dass ASP-Tags <%,%>, <% = und Skript-Tag aus PHP 7) entfernt werden.. Wenn Sie also langfristigen portablen Code unterstützen und auf die modernsten Tools umsteigen möchten, sollten Sie diese Codeteile ändern.

371
Oli

Ich bin zu gern <?=$whatever?> loslassen. Hatte noch nie ein Problem damit. Ich werde warten, bis es mich in den Arsch beißt. Im Ernst, 85% der (meiner) Kunden haben Zugriff auf php.ini, wenn sie selten ausgeschaltet werden. Die anderen 15% nutzen Mainstream-Hosting-Anbieter, und praktisch alle von ihnen haben sie aktiviert. Ich liebe sie.

172

Beginnend mit PHP 5.4, ist die Echoverknüpfung ein von den Short-Tags getrenntes Problem, da die Echoverknüpfung immer aktiviert ist. Es ist nun eine Tatsache:

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

142
dukeofgaming

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

Die eingebettete PHP-Syntax 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-Templating-Engine wie Smarty zu verwenden, aber für diejenigen Puristen unter uns, die schnelles Rendern und eine reine Codebasis fordern, ist PHP der einzige Weg dazu Vorlagen 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, weil Sie wahrscheinlich ohnehin nicht PHP und XML mischen sollten; und wenn ja, sollten Sie PHP) verwenden Sicherheit sollte niemals ein Problem sein, denn wenn Sie vertrauliche Informationen wie Datenbankzugriffsdaten in Vorlagendateien einfügen, treten größere Probleme auf!

In Bezug auf die Serverunterstützung muss man sich allerdings der Zielplattform bewusst sein. Wenn Shared Hosting ein wahrscheinliches Ziel ist, sollten kurze Tags vermieden werden. Aber für viele professionelle Entwickler (wie mich selbst) erkennt der Client an (und hängt 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 nicht die absolute Kontrolle über die Serverkonfiguration gibt - in einem solchen Fall können wir uns darauf verlassen, dass wir viel mehr Probleme haben, als nur den Short-Tag-Support zu verlieren. Das passiert einfach nicht.

Also ja - ich stimme zu, dass die Verwendung von kurzen Tags sorgfältig abgewogen werden sollte. Aber ich bin auch der festen Überzeugung, dass dies IMMER eine Option sein sollte und dass ein Entwickler, der sich seiner Umgebung bewusst ist, diese gerne nutzen kann.

80
Brian Lacy

Kurze Tags kommen dank Zend Framework zurück, das " PHP als Template Sprache " in ihrer Standard MVC Konfiguration drückt. Ich verstehe nicht, worum es in der Debatte geht. Die meiste Software, die Sie in Ihrem Leben produzieren, wird auf einem Server ausgeführt, den Sie oder Ihr Unternehmen kontrollieren. Solange Sie konsequent bleiben, sollte es keine Probleme geben.

[~ # ~] Update [~ # ~]

Nach einigem Arbeiten mit Magento , das eine lange Form verwendet. Infolgedessen habe ich auf die Langform von gewechselt:

<?php and <?php echo

über

<? and <?=

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

33
Jake McGraw

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

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

21
Vinko Vrsalovic

Es folgt das wunderbare Flussdiagramm desselben:

decision making tree of the use of <?=

Quelle: ähnliche Frage zu Software Engineering Stack Exchange

19
Sumoanand

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.php hat viele Ratschläge, einschließlich:

während einige Leute kurze Tags und Tags im ASP - Stil für praktisch halten, sind sie weniger portabel und im Allgemeinen nicht zu empfehlen.

und

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

und

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

13

Falls das noch jemand beachtet ... Stand PHP 5.4.0 Alpha 1 <?= ist 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. Zumindest vorerst ...

13
James Alday
  • Kurze Tags sind bei einigen Webservern (gemeinsam genutzte Hosts usw.) nicht standardmäßig aktiviert, sodass die Code-Portabilität zu einem Problem wird, wenn Sie zu einem wechseln müssen von diesen.

  • Die Lesbarkeit kann für einige ein Problem sein. Viele Entwickler können feststellen, dass <?php fällt als offensichtlicherer Marker für den Beginn eines Codeblocks auf als <? wenn Sie eine Datei scannen, insbesondere wenn Sie mit einer Codebasis mit HTML und PHP eng inter stecken -gewebte.

12
ConroyP

Hinweis: Beginnend mit PHP 5.4 der Kurzbezeichnung <?= ist jetzt immer verfügbar.

10
brunoais

Ich habe diese Seite gelesen, nachdem ich nach Informationen zum Thema gesucht hatte, 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 egal. Warum sollten Sie etwas anderes verwenden, wenn diese eindeutig für PHP sind? <% und%> mean ASP für mich, und <script ..... bedeutet in den meisten Fällen Javascript.) Halten Sie sich also aus Gründen der Konsistenz, des schnellen Lernens, der Portabilität und der Einfachheit an die Standard?

Andererseits stimme ich zu, dass kurze Tags in Vorlagen (und NUR in Vorlagen) nützlich zu sein scheinen, aber das Problem ist, dass wir gerade so viel Zeit damit verbracht haben, sie hier zu diskutieren, dass es wahrscheinlich sehr lange dauern würde, sie tatsächlich zu verschwenden So viel Zeit für die Eingabe der drei zusätzlichen Zeichen von "php" !!

Viele Optionen zu haben, ist zwar nett, aber keineswegs 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 <? 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, aber dennoch kurz Tags werden häufig 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.

Letztendlich glaube ich nicht, dass kurze Tags das Problem sind: Es gibt nur zwei logische Typen von PHP Codeblöcken - 1) regulär PHP Code) , 2) Schablonenechos. Für die erstere bin ich fest davon überzeugt, dass nur <? Php und?> Alles konsistent und portabel halten dürfen. 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 bei den entferntesten Möglichkeiten könnte es zu Konflikten kommen), und das könnte leicht die umständliche <? = Syntax ersetzen. Oder wenn das ein Problem ist, könnten sie vielleicht stattdessen <? Php = $ var?> Verwenden und sich keine Gedanken ü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 haben .ini oder .htaccess. 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?

5
Daniel Ross

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

Meine zwei Cent? Wenn Sie nie vorhaben, den Code an einer anderen Stelle auszuführen, verwenden Sie ihn, wenn Sie möchten. Ich möchte lieber nicht massiv suchen und ersetzen müssen, wenn mir klar wird, dass es eine blöde Idee war.

3
patricksweeney

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

3
AnkTech Devops

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

Sie können sie in einer .htaccess - Datei aktivieren, wenn Sie nicht zu php.ini Gelangen:

php_flag short_open_tag on
3
Jimmer

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

3
Greg

IMHO-Leute, die kurze Tags verwenden, vergessen oft, zu entkommen, was immer sie wiedergeben. Es wäre schön, eine Template-Engine zu haben, die standardmäßig nicht funktioniert. Ich glaube, Rob A hat einen schnellen Hack geschrieben, um kurzen Tags in Zend Frameworks-Apps zu entkommen. 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) ?> 
2
Adrian Judd

Um Portabilitätsprobleme zu vermeiden, starten Sie PHP tags mit <?php und falls Ihre PHP Datei nur PHP ist, kein HTML, brauchen Sie die schließenden Tags nicht zu verwenden.

2
Kumar

Man muss sich fragen, wozu kurze Tags gut sind.

Schnellere Eingabe

MDCore sagte:

<?= Ist weitaus bequemer als die Eingabe von <?php echo

Ja ist es. Sie müssen in Ihren Skripten nicht mehr als 7 Zeichen * X eingeben.

Wenn ein Skript jedoch eine Stunde oder 10 Stunden oder mehr zum Entwerfen, Entwickeln und Schreiben benötigt, wie wichtig ist es dann, wenn in wenigen Sekunden für die Dauer des Skripts nicht hier und da diese 7 Zeichen eingegeben werden?

Verglichen mit der Möglichkeit, dass einige Kernskripten oder alle Skripten nicht funktionieren, wenn kurze Tags nicht aktiviert oder aktiviert sind, ein Update oder eine Änderung der INI-Datei/Serverkonfiguration jedoch dazu führt, dass sie nicht mehr funktionieren, andere Möglichkeiten.

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

Einfacher zu lesen

Dies hängt von Vertrautheit ab.
Ich habe immer <?php echo Gesehen und benutzt. Während <?= 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, besser vertraut , wenn er <?= ist gleich "PHP open tag and echo"?
Ich würde sagen, die meisten würden sich mit der logischeren wohler fühlen. Das heißt, ein klares PHP offenes Tag und dann was passiert "Echo" - <?php echo.

Risikobeurteilung
Problem = Die gesamte Site oder 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 dafür aber viel und verlieren dadurch wahrscheinlich auch die Lesbarkeit.

Front-End- oder Back-End-Codierer , die mit <?= Vertraut sind , verstehen <?php echo Eher als Standard PHP things - standard <?php Offenes Tag und sehr bekanntes "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 schlussfolgert, dass das Gleichheitszeichen auf einem PHP Short-Tag "Echo" ist.

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

Nachdem dies gesagt wurde, sagte ein Freund von mir dies zur Unterstützung alternativer standardisierter Tags im Asp-Stil wie <% eher, als <?, eine Einstellung in der php.ini mit dem Namen asp_tags. Hier ist seine Argumentation:

... beliebige Konventionen sollten standardisiert werden. Das heißt, jedes Mal, wenn wir vor einer Reihe von Möglichkeiten stehen, die alle gleichwertig sind - wie zum Beispiel die seltsame Zeichensetzung, die 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).

Klingt gut für mich, aber ich glaube, keiner von uns kann die Wagen um diese Sache kreisen. In der Zwischenzeit würde ich mich voll und ganz an <?php.

1
stereoscott

Konvertieren <? (ohne abschließendes Leerzeichen) bis <?php (mit einem abschließenden Leerzeichen):

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

Konvertieren <? (mit einem abschließenden Leerzeichen) zu <?php (unter Beibehaltung des nachgestellten Leerzeichens):

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

Ich fand es erwähnenswert, dass ab PHP 7:

  • Kurz ASP PHP tags <% … %> sind weg
  • Kurze PHP Tabs <? … ?> sind noch verfügbar, wenn short_open_tag ist auf true gesetzt. Dies ist die Standardeinstellung.
  • Seit PHP 5.4, Short Print Tags <?=… ?> sind immer aktiviert, unabhängig vom short_open_tag Einstellung.

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

Abgesehen von persönlichen Vorlieben gibt es keinen Grund mehr, die kurzen Druckmarken nicht zu verwenden.

Wenn Sie Code schreiben, der mit älteren Versionen von PHP 5 kompatibel ist, müssen Sie sich natürlich an die alten Regeln halten, aber denken Sie daran, dass vor PHP 5) alles möglich ist === 5.6 wird jetzt nicht unterstützt.

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

1
Manngo

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

Selbst wenn Sie echo htmlspecialchars() zu h() kürzen, ist es immer noch ein Problem, dass Sie sich daran erinnern müssen, es fast jedes Mal hinzuzufügen (und zu versuchen, zu verfolgen, welche Daten vor dem Escapieren vorhanden sind, welche ungehindert-aber-harmlos macht nur Fehler wahrscheinlicher).

Ich benutze eine Template-Engine das ist standardmäßig sicher und schreibt <?php Tags für mich.

0
Kornel

<?php ?> sind viel besser zu benutzen, 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!

Es wird jedoch etwas ausgegeben, zum Beispiel: <?=$variable;?> ist gut. Aber lieber die längeren Tags. <?php echo $variable;?>

0
M50Scripts

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>
0
GaziAnis