Ich bin vor <?= ?>
kurzem auf dieses PHP-Tag gestoßen, und ich zögere, es zu verwenden, aber es juckt so stark, dass ich Ihre Meinung dazu haben wollte. Ich weiß, dass es eine schlechte Praxis ist, kurze Tags zu verwenden, <? ?>
und dass wir <?php ?>
stattdessen vollständige Tags verwenden sollten, aber was ist mit diesem <?= ?>
:?
Es würde Tipparbeit ersparen und die Lesbarkeit des Codes verbessern, IMO. Also stattdessen:
<input name="someVar" value="<?php echo $someVar; ?>">
Ich könnte es so schreiben, was sauberer ist:
<input name="someVar" value="<?= $someVar ?>">
Ist die Verwendung dieses Operators verpönt?
echo
sehr leicht zu XSS führt und Sie sich besser auf die kontextbezogene Echomethode verlassen sollten (dh einfunction html($x) { echo htmlentities($x,...); }
und unhtml($someVar);
anstelle vonecho $someVar
oderecho json_encode($x);
für den JS-Kontext verwenden). Dies macht<?=
Tags dann zu einer schlechten Praxis, da dies bedeutet, dass Sie den Variableninhalt an einer anderen Stelle mit HTML-Escapezeichen versehen haben und an einer anderen Stelle magisch wissen müssen, dass diese Variable mit HTML-Escapezeichen versehen sein muss, da sie im HTML-Kontext wiedergegeben wird.Antworten:
Geschichte
Bevor der Fehlinformationszug zu weit von der Station entfernt ist, gibt es eine Reihe von Dingen, die Sie über kurze PHP-Tags verstehen müssen.
Das Hauptproblem bei den kurzen Tags von PHP ist, dass PHP es geschafft hat, ein Tag (
<?
) auszuwählen , das von einer anderen Syntax, XML, verwendet wurde .Bei aktivierter Option konnte die XML-Deklaration nicht ohne Syntaxfehler ausgegeben werden:
Dies ist ein großes Problem, wenn Sie sich überlegen, wie häufig XML analysiert und verwaltet wird.
Was ist
<?=
?Obwohl
<?
Ursachen Konflikte mit xml,<?=
nicht . Unglücklicherweise waren die Optionen zum Ein- und Ausschalten damit verbundenshort_open_tag
, was bedeutete, dass<?=
Sie sich mit den Problemen des kurzen offenen Tags (<?
) befassen mussten, um die Vorteile des kurzen Echo- Tags ( ) zu nutzen. Die mit dem Short-Open-Tag verbundenen Probleme waren weitaus größer als die Vorteile des Short-Echo-Tags, sodass Sie eineinhalb Millionen Empfehlungen findenshort_open_tag
, die Sie deaktivieren sollten .In PHP 5.4 wurde jedoch das Kurz-Echo-Tag unabhängig von der
short_open_tag
Option wieder aktiviert . Ich sehe dies als eine direkte Bestätigung der Bequemlichkeit von<?=
, da an und für sich nichts grundlegend Falsches daran ist.Das Problem ist, dass Sie nicht garantieren können, dass dies der Fall ist,
<?=
wenn Sie versuchen, Code zu schreiben, der in einer größeren Anzahl von PHP-Versionen funktioniert.ok, jetzt, wo das alles aus dem Weg ist
Solltest du verwenden
<?=
?quelle
<?=
in Zukunft entfernt. Sie können es in weniger als einer Minute reparieren, egal wie viele Tausend Dateien es verwenden. Sie führen einfach ein projektweites Suchen und Ersetzen von<?=
durch<?php echo
. Meine Antwort lautet: Mach dir keine Sorgen und nutze sie einfach , die Vorteile übersteigen die Konsequenzen erheblich.<?=
Rasmus Lerdorf selbst hat das sehr engagiert.<?=
wird immer eingeschaltet sein ( stackoverflow.com/a/6064813/156257 ) und die meiste Zeit waren sie eingeschaltet. Sie können mir das Gegenteil beweisen, indem Sie sich bei Ihrem Host erkundigen, ob: er deaktiviert ist und PHP <5.3 verwendet und die Einstellung nicht von Benutzern oder auf besonderen Wunsch überschrieben werden kann; Wenn alles Vorherige falsch ist, machen Sie sich auf jeden Fall Sorgen<?=
.<?=
das entfernt wird, und ich auch nicht. Andere könnten es sein, und wenn sie es sind, müssen sie es nicht benutzen<?=
. Einige Leute haben irrationale Angst vor der Verwendung bestimmter Sprachfunktionen ( wie das Weglassen von schließenden Tags in PHP ).Meinen PHP-Hut abstauben
Ich würde auf jeden Fall die Verwendung der
<?= $someVar ?>
ausführlicherecho
bevorzugen (einfach persönliche Präferenz). Der einzige Nachteil von AFAIK ist für Benutzer, die eine frühere Versionshort_open_tag
als 5.4.0 verwenden . In diesem Fall muss AFAIK in der php.ini aktiviert sein .Nun gesagt, wenn Ihr Projekt kein Betriebssystem ist, dann ist es ein strittiger Punkt. In diesem
short_open_tag
Fall würde ich entweder die Tatsache dokumentieren, dass s aktiviert sein muss, oder die portablere der beiden Lösungen verwenden.quelle
<?=
durch nicht beeinflusst wirdshort_open_tag
auf PHP 5.4,<?
noch ist und wenn Sie eine Gewohnheit, mit Kurzform - Tags erhalten, ist es ganz einfach , zu vergessen , was auf welcher Version unterstützt wird .<?=
"Ich gebe jetzt eine Variable aus" für die Verwendung im Vorlagenstil und<?php
"Ich führe jetzt viel Code aus". Ich würde vorschlagen, nie zu verwenden<?
, aber das beide<?=
und<?php
sind in Ordnung.Sie sollten auf jeden Fall versuchen, Kurzform-Tags zu vermeiden, egal ob sie es sind
<?
oder nicht<?=
.Der wichtigste technische Grund ist die Portabilität. Sie können nie sicher sein, dass die Kurzform-Tags für jedes Setup funktionieren, da sie deaktiviert werden können. Lesen Sie die
short_open_tag
Direktive. Aber Sie können immer absolut sicher sein, dass die lange Form überall funktionieren wird.Das ist auch eine schlechte Angewohnheit. Ich kann Ihnen nicht wirklich sagen, was Sie lesbarer finden, aber ich bin fieberhaft dagegen, die Lesbarkeit von Code als Ausrede zu verwenden, um sich ein paar Tastenanschläge zu ersparen. Wenn Sie sich Gedanken über die Lesbarkeit machen, sollten Sie sich für eine Vorlagen-Engine entscheiden:
ist aus beiden Beispielen weitaus lesbarer.
Abschließend ist anzumerken, dass von großen PHP-Projekten wie PEAR und Zend Framework Short Form-Tags ausdrücklich abgeraten werden .
quelle
<?php
undecho
anstelle von<?
und<?=
, zählen Sie das als ernsthafte Zeit? Und was passiert, wenn Sie Ihr Projekt auf einen Server verschieben, auf dem kurze Tags aus irgendeinem Grund deaktiviert sind?In der PHP-Dokumentation steht eindeutig, dass Sie kurze Echo-Tags sicher verwenden können:
5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.
Dies ist zwar für PHP-Version 5.4 und höher, aber jeder sollte zumindest diese verwenden. Ich würde sie nur zu Vorlagenzwecken bevorzugen.
quelle
Gründe für die Verwendung kurzer Tags:
Gründe für die nicht kurz - Tags:
quelle
Ich denke, dass die
<?=
Version eine gute / akzeptable Praxis ist, vorausgesetzt, Sie verwenden sie nur für die endgültige Ausgabe von Variablen und vermeiden Funktionsaufrufe oder ternäre Logik, die nicht direkt mit der Darstellung der Daten zusammenhängen.Es ist sicherlich viel besser als
<? echo($x); ?>
überall.Langfristig sollten Sie sich mit Vorlagenmodulen wie Smarty befassen .
quelle
Ab PHP 7.4 ändert sich das Spielfeld etwas:
<? ?>
ist offiziell veraltet und wird in PHP 8.0 entfernt.PHP RFC: Veraltete PHP Short Open Tags geben explizit an, dass dies nicht
<?= ?>
betroffen ist. Dies würde (meiner Meinung nach, nicht der RFC) anzeigen, dass von seiner Verwendung nicht abgeraten wird.quelle
Um ehrlich zu sein, denke ich, dass es ziemlich veraltet ist, ein Ergebnis zu wiederholen, egal welche Methode (alt oder neu), während MVC bereits 33 Jahre alt ist.
Ich würde sagen, ja, dies ist eine gute Vorgehensweise, um die eingehenden Server- (PHP-) Daten in einem XML-Dokument zu kapseln und in Ihrer Anwendungs- / Client-Ebene zu verarbeiten. Auf diese Weise ersparen Sie sich sogar die Idee, ein solches Tag zu verwenden.
quelle