PHPの短いタグを使用できますか?


522

公式ドキュメントによる情報は次のとおりです。

PHPで使用できる開始タグと終了タグの4つの異なるペアがあります。これらのうち2つ<?php ?><script language="php"> </script>は常に使用できます。他の2つは短いタグとASPスタイルのタグで、php.ini構成ファイルからオンとオフを切り替えることができます。そのため、短いタグやASPスタイルのタグが便利だと考える人もいますが、移植性が低く、一般的には推奨されません

私の経験では、ほとんどのサーバーがない短いタグが有効になっています。タイピング

<?=

タイピングよりもはるかに便利です

<?php echo 

プログラマーの利便性は重要な要素ですが、なぜ推奨されないのですか?


61
このwhy部分に答えるために、私はZend PHP 5認定ガイドを引用します。「短いタグは、しばらくの間、PHPの世界の標準でしたが、XMLヘッダーと競合するという大きな欠点があり、そのため、道端に倒れた」
ふわふわした

7
この問題が発生するユースケースは何ですか?それは、PHPを使用してXMLを生成することが開発者にとって苦痛であることを意味しますか?
Jon z

9
公開したいXMLドキュメントがあるが、何らかの理由でドキュメントをphpで解析できるようにして、ブラウザで.xmlを解析できるようにするとします。短いタグを使用してタグをオンにすると、突然、XMLヘッダーを介してXMLドキュメントが解析され、問題が発生します。ずっと前にこれを理解しようとする気が狂った。私が実行するすべてのサーバーでショートコードが無効になって以来、私が一緒に働いたチームは非ショートコードに
頼らざるを得ませんでした

43
PHP 5.4.0以降、short_open_tagディレクティブには短いエコータグが含まれていません <?= $example;?>。他のすべての短いタグの使用は無駄と見なされるため、これは非常に重要です。とにかく、これからは短いエコータグの使用をお勧めします。よりスムーズで整然としたコードベースを提供します-esp。ビューファイル内。したがって、PHP> = 5.4.0 では設定なし<?= ?>で使用できます short_open_tag。コードでは他の短いタグを使用しないでください。コード神はあなたがそうするとき非常に怒ります...
ボリスラフ・サベフ2013

6
これは簡単なコメントとして追加します。長い回答がすでに多すぎるためです。これは、XMLで開始宣言に使用されるだけで<?はありません。これは「処理命令」の一般的な構文であり、2番目に一般的な例はです。(5.4以降で許可されているように)実際には有効な処理命令と見なすことができますが、全体を主張すると、構文間に不要な競合が生じます。<?xml version="1.0" ?><?xml-stylesheet ... ?><?php<?=<?
IMSoP 2013

回答:


374

サポートされていない(そして有効にできない)サーバーにコードを移動する必要がある場合はPITAであるため、これらは推奨されません。あなたが言うように、多くの共有ホストショートタグをサポートしますが、「ロット」はそれらすべてではありません。スクリプトを共有する場合は、完全な構文を使用することをお勧めします。

私はそれに同意<?し、<?=よりプログラマに簡単です<?phpし、<?php echo限り、あなたは同じフォーム毎回使う(とスペース(例えばチャックしていないとして検索がと置換バルクを行うことが可能です:<? phpまたは<? =

私は理由として読みやすさをまったく購入しません。ほとんどの真面目な開発者は、構文強調表示のオプションを利用できます。

コメントでThiefMasterが言及しているように、PHP 5.4以降、<?= ... ?>タグはshorttagsの設定に関係なく、どこでもサポートされます。これは、移植可能なコードで安全に使用できることを意味しますが、それは、PHP 5.4以降に依存していることを意味します。5.4より前のバージョンをサポートする必要があり、ショートタグを保証できない場合でも、を使用する必要があります<?php echo ... ?>

また、ASPタグ<%、%>、<%=、およびスクリプトタグがPHP 7から削除されていることを知っておく必要があります。したがって、長期のポータブルコードをサポートし、最新のツールに切り替えたい場合は、コードのその部分を変更することを検討してください。


91
だから、説明は:彼らはサポートされていないので悪いですか?しかし、なぜサポートされないのですか?それらは仕様の一部ではないのですか?わかりましたが、なぜそれらは仕様の一部ではありませんか?私はこの答えに少しがっかりしています。
JosefSábl09年

61
なぜここにいるのか、どうしてすべてが始まったのかなど、「大きな質問」について話し合うためにここにいるわけではありません。ショートタグのサポートは共有サーバーでは保証されておらず、次のメジャーバージョンでは完全に削除されます。あなたが知る必要があるのはそれだけです。
オリ

39
必須のPHP テンプレートエンジンです。:P
構文エラー

49
短いタグは段階的に廃止されていません。ASPスタイルの短いタグのみ。
Brian Lacy

46
PHP 5.4の(非常に近い)将来では、<?=の使用は、short_open_tagsが有効か無効かから切り離されます。<?=は段階的に廃止されていませんが、まったく反対に、言語の基本的な部分と見なされています。
グリーバー氏

175

私は<?=$whatever?>それを手放すのが好きです。問題はありませんでした。お尻に噛み付くまで待ちます。真剣に言うと、(私の)クライアントの85%が、まれにphp.iniにアクセスできます。他の15%は主流のホスティングプロバイダーを使用しており、事実上すべてのプロバイダーがそれらを有効にしています。私はそれらが大好きです。


41
@B Seven発生する可能性のあるすべての理論的な問題を回避しようとすると、コードはほぼ間違いなく非効率でバグが多くなります。PHPグループが[ASPタグではなく]短いタグを段階的に廃止するまでは、「修正」に費やすことができる他の方法よりも、かまれる心配ははるかに少なく、解決策ははるかに単純です。
SamGoody

18
それがあなたを噛んだら、より良いホスティングに移動してください
Lie Ryan

4
サポートされていない可能性があるため、使用しないことに同意しません。サーバーでサポートされていない可能性のある他の機能を使用しないでください。MYSQL vs MYSQLI?より良いホストに変更するために少しの時間を費やすという小さなチャンスを避けるために、長いタグを何度も何度も何度も時間を無駄にします。
Deanまたは

2
@BSeven、出荷されているデフォルトの拡張機能以外のPHP拡張機能を使用しないということですか?
Pacerier、2015

143

PHP 5.4以降、エコーショートカットは常に有効になるため、エコーショートカットは短いタグとは別の問題です。それは今の事実です:

したがって、エコーショートカット自体(<?=)は安全に使用できます。


19
これが唯一必要な「ショートタグ」だと思います。<?phpすべてのクラスファイルの先頭で使用でき<?=、ビューに使用できます。双方にとって好都合。
Xeoncross

6
So the echo shortcut itself (<?=) is safe to use... PHP 5.4を必要とすることに慣れている限り。広く分散しているPHPアプリ(ワードプレスなど)には、5.4を必要とするという贅沢はなく、2011年までPHP 4のサポートを提供し続けました。これは、PHP 5がリリースされてから7年間です。facebookのような場所にいて、ソフトウェアのすべてのインストールが会社自体によって直接操作されている場合、ワードプレスのようなプロジェクトで作業している場合よりも、5.4のサポートを要求する方がはるかに簡単です。
Frank Farmer

@dukeofgaming、すごいキャッチ、彼らのSVNリビジョンがウェブ上でアクセスできることを知りませんでした。
Pacerier、2015

82

この全体の議論の問題は、テンプレート言語としてのPHPの使用にあります。アプリケーションのソースファイルでタグを使用する必要があると主張する人はいません。

ただし、PHPの組み込み可能な構文では、PHPを強力なテンプレート言語として使用でき、テンプレートはできるだけシンプルで読みやすいものにする必要があります。多くの人は、Smartyのような非常に遅いアドオンテンプレートエンジンを使用する方が簡単だと感じていますが、高速レンダリングと純粋なコードベースを要求する純粋主義者にとって、テンプレートを作成する唯一の方法はPHPです。

短いタグの使用に対する唯一の有効な引数は、すべてのサーバーでサポートされていないことです。とにかくPHPとXMLを混在させるべきではないため、XMLドキュメントとの競合に関するコメントはばかげています。もしそうなら、あなたはPHPを使ってテキストの文字列を出力するべきです。セキュリティが問題になることはありません。データベースアクセス資格情報などの機密情報をテンプレートファイル内に配置する場合は、さらに大きな問題が発生するからです。

さて、サーバーサポートの問題に関しては、確かに1つはターゲットプラットフォームを認識する必要があります。共有ホスティングがターゲットになりそうな場合は、短いタグは避けてください。しかし、多くのプロの開発者(私のような)にとって、クライアントはサーバーの要件を決定することを認めます(実際、事実に依存します)。多くの場合、私は自分でサーバーをセットアップする責任があります。

また、サーバー構成の絶対的な制御を提供しないホスティングプロバイダーとは連携しません。このような場合、短いタグのサポートを失うだけでなく、問題が発生する可能性があります。それは起こりません。

だからはい-短いタグの使用は慎重に検討されるべきだと私は同意します。しかし、私はそれが常にオプションであるべきであり、彼の環境を認識している開発者がそれらを自由に使用するべきであると固く信じています。


6
何らかの理由で.xmlファイルをmod_phpに渡すようにapacheを設定した場合、<?xmlは短いタグを付けた頭痛になります。しかし、それは明らかに奇妙な設定です。
フランクファーマー

3
テンプレート出力ドキュメントのいくつかの種類に回避策なしに埋め込むことができない言語が大きいが失敗です。PHPコードと短いタグを含むXMLテンプレートを使用すべきではない唯一の理由は、それが機能しないためであり、意味がないためではありません。
Vinko Vrsalovic 2010年

8
高速で便利なテンプレート言語としてPHPの利点を活用することは、「大きな失敗」ではありません。前に述べたように、それは利点と欠点を比較検討し、選択したアプローチに対応する方法でコードを書くことの問題です。特定のシナリオ(簡単に回避できる)で機能しないという理由だけで、有効なアプローチを断固として却下しないでください。
ブライアンレイシー

5
私は断固として有効なアプローチを却下していません(質問への私の回答を参照してください)。XMLでPHPを断固として却下するのはあなたです。また、私が言及していた大きな失敗は、<?XMLの醜い回避策につながるため、短いタグとして使用することの決定でした。そうは言っても、それは利点と欠点を比較検討することの問題であり、あなたがあなたが何をしているのかを知っているなら、あなたは確かにそれを行うことができると同意します。しかし、これは<?良い選択ではありません。
Vinko Vrsalovic

3
私はパーティーに少し遅れましたが、私はこの答えが本当に好きで、それは状況に関する私の経験を反映しています。私たちのオフィスではこの問題についていくつかの意見の相違がありますが、長年にわたってほぼ毎日PHPで作業しているため、これが問題になることは一度もありません。PHPを使用してXMLを生成する場合、これは私の経験では常に非常に動的なコンテンツのコンテキストにあり、PHPを介して直接テンプレート化されなかったため、問題が発生することはありません。
redreinard 2013年

33

Zend FrameworkデフォルトのMVC構成でテンプレート言語としてのPHP」をプッシュしたおかげで、短いタグが復活しています。議論が何であるかはわかりません。あなたが生涯に作成するソフトウェアのほとんどは、あなたやあなたの会社が管理するサーバー上で動作します。一貫性を保つ限り、何の問題もないはずです。

更新

長い形式を使用するMagentoでかなりの作業を行った後。その結果、私は長い形式に切り替えました:

<?php and <?php echo

以上

<? and <?=

相互運用性を保証するための少量の作業のようです。


8
私はフリーランスであり、すべてのコードは共有ホスティングに組み込まれているため、まったく制御できません。:)
MDCore 2008年

12
colocに移動するクライアントが十分にある場合、共有ホスティングは安全でなく、不安定です。
Jake McGraw、

2
Zendが長いバージョンを使用しているため、Zendが持ち帰っていた短いタグは明らかにキャッチされませんでした:framework.zend.com/manual/en/zend.view.scripts.html
Gerry

3
@Gerry私も最近これを読んだことがあります。このスレッドの最後のコメントを参照してください。短いオープンタグを有効にするために.htaccessを更新
MrWhite

2
UPDATEの後の最初の文の文法を実際に修正する必要があります。これは、現在の形式では意味がありません。
redreinard 2013年

22

混乱のため、XML宣言で生成できます。しかし、多くの人あなたに同意 ます。

追加の懸念は、最終的なホスティングサーバーがそれらをオフにしていることを最後に確認するためだけに短いタグですべてをコーディングするために生成する痛みです...


とにかく、short_tagsがオンの場合、XML宣言は混乱を招きませんか?
MDCore 2008年

したがって、XML宣言を直接出力する代わりに、PHPにそれをエコーさせることができます。それは本当に良い論争ではありません。
moo

それは何の反駁でもありません。これが唯一の実際の理由であり、「ホストがそれをオフにする」という他の理由の原因です。もちろん、いつものように、あなたが何をしているのかわかっている場合は、それを使用できます。
Vinko Vrsalovic 2009

1
@macek:私はそれを知っています。それは私が考えた最初の例にすぎません。また、PHPをXMLファイルに埋め込んだ場合はどうなるでしょうか。直接行うことはできません。そして、その問題の解決策も私に言わないでください。私はそれらを知っています。ポイントは、PHPがXMLファイルを解析する方法はたくさんあるということです。回避策(<?='<?xml')を使用するか、「それを行うべきではない」と言ってそれらをすべて却下することはできますが、それによってそれが発生する可能性があるという事実は消えません。
Vinko Vrsalovic

1
機能しない場合、短いタグはどのように痛みますか?そのバルクを行うと交換することは非常に容易である<?=<? echo 。多くのテキストエディターは、これを一度に数千のファイルに対して簡単に処理できます。
Yamiko

20

以下は同じものの素晴らしいフロー図です:

<?=の使用に関する意思決定ツリー

出典:ソフトウェアエンジニアリングスタック交換に関する同様の質問


2
これは<?、質問に記載されている短いタグと同じではなく、短いエコータグを使用するかどうかを示しています(5.4より前の同じ構成設定を使用していました)
Alok

あなたは多くの場合、短いタグを使用したくない理由の状況が本当に(共有ホスティングシステム上のphp.iniファイルを変更することなどできません)説明されていないものの、実際にはこれは、誰もが理解できる答えなければなりません
ビョルンK

14

http://uk3.php.net/manual/en/language.basic-syntax.phpmode.phpには、次のようなアドバイスがたくさんあります。

一部の人々は短いタグとASPスタイルのタグを便利だと思っていますが、移植性が低く、一般的には推奨されません。

そして

PHPをXMLまたはXHTMLに埋め込む場合は<?php ?>、標準に準拠するためにタグを使用する必要があることに注意してください。

そして

短いタグはターゲットサーバーでサポートされていない可能性があるため、再配布を目的としたアプリケーションやライブラリを開発する場合や、管理下にないPHPサーバーにデプロイする場合は、短いタグを使用しないでください。移植可能な再配布可能なコードの場合は、短いタグを使用しないでください。



12
  • 一部のWebサーバー(共有ホストなど)では、短いタグがデフォルトで有効になっていません。そのため、これらのいずれかに移動する必要がある場合、コードの移植性が問題になります。

  • 読みやすさが問題になる場合があります。多くの開発者は、特にHTMLとPHPが密接に織り込まれているコードベースに行き詰まっている場合は、ファイルをスキャンするとき<?phpよりも、コードブロックの開始のより明確なマーカーとして目を引くことに気付く<?でしょう。


2
95%のウェブサーバーで短いタグが有効になっています。
Paolo Bergantino

19
私は「読みやすさ」という主張はしません。PHPをテンプレート言語として使用している場合<?= $var ?>は、よりも読みやすくなります<?php echo $var ?>
Frank Farmer

2
@Pauloこれは'08年から変更されている可能性がありますが、yum installおよびapt-getバージョンのPHPを使用するEC2 UbuntuおよびFedoraインスタンスでは、デフォルトでショートタグが無効になっています
Doug Molineux

2
完全なタグを使用すると、100%になります:)
Elvis Ciotti

1
@FrankFarmer、私は彼がエコーのないものを比較していると思います。<?<?php
Pacerier、2015

11

注:PHP 5.4以降、短いタグ<?=が常に使用できるようになりました。


5

トピックに関する情報を探してこのページを読んだところ、遅延と一貫性という1つの大きな問題については言及されていないと思います。PHPの「実際の」タグは<?phpと?>です。どうして?私は本当に気にしません。それらが明らかにPHP用であるのに、なぜ他のものを使用したいのですか?<%と%>は私にとってASPを意味し、<script .....はJavascriptを意味します(ほとんどの場合)。一貫性、高速学習、移植性、シンプルさのために、標準に固執してみませんか?

一方、テンプレート内の短いタグ(およびテンプレート内のみ)は有用であるように見えますが、問題は、ここで説明するのに多くの時間を費やしたため、実際に無駄になるまでに非常に長い時間がかかる可能性があることです。 「php」の余分な3文字を入力するのにその時間!

多くのオプションがあることは良いことですが、それはまったく論理的ではなく、問題を引き起こす可能性があります。すべてのプログラミング言語で4種類以上のタグが許可されている場合を想像してください。JavaScriptは<JSまたは<スクリプト....または<%または<?JS ....それは役に立ちますか?PHPの場合、解析順序はこれらを許可する傾向にありますが、言語は他の多くの点で柔軟性がありません。わずかな不一致があると通知またはエラーをスローしますが、短いタグがよく使用されます。また、短いタグがサポートされていないサーバーで使用された場合、エラーが発生しない場合があるため、何が問題であるかを把握するのに非常に長い時間がかかることがあります。

最後に、ここでは短いタグが問題だとは思いません。1)通常のPHPコード、2)テンプレートエコーの2つの論理的なタイプのPHPコードブロックしかありません。前者については、すべての一貫性と移植性を保つためだけに<?phpと?>のみが許可されるべきであると私は固く信じています。後者の場合、<?= $ var?>メソッドは醜いです。どうしてこうなったの?もっと論理的なものを追加してみませんか?<?php $ var?>それは何もしません(そして、最も遠い可能性がある場合にのみ、それが何かと競合する可能性があります)。これは、厄介な<?=構文を簡単に置き換えることができます。あるいは、それが問題である場合、おそらく<?php = $ var?>を代わりに使用して、不整合を心配する必要はありません。

開始タグと終了タグに4つのオプションがあり、特別な「エコー」タグがランダムに追加された時点で、PHPはphp.iniまたは.htaccessに「カスタム開始/終了タグ」フラグを設定することもできます。そうすることで、デザイナーは最も気に入ったものを選択できます。しかし、明白な理由でそれはやり過ぎです。では、なぜ4つ以上のオプションを許可するのですか?


4

個別のビューファイルを持つMVCフレームワークまたはCMSで作業する場合は、これらを使用することをお勧めします。
高速でコードが少なく、設計者を混乱させません。サーバー構成でそれらの使用が許可されていることを確認してください。


4

少し異なる状況の1つは、CodeIgniterアプリケーションを開発するときです。CodeIgniterは、テンプレート/ビューでPHPが使用されている場合は常にショートタグを使用するようです。それ以外の場合は、モデルとコントローラーでは常にロングタグが使用されます。これはフレームワークにおける厳格な規則ではありませんが、ほとんどの場合、フレームワークと他の用途からの多くのソースはこの規則に従います。

私の二セント?他の場所でコードを実行する予定がない場合は、必要に応じて使用してください。ばかげたアイデアだとわかったときに、大規模な検索や置換を行う必要はありません。



3

短いタグを使用する私見の人々は、反響しているものを逃れることを忘れがちです。デフォルトでエスケープするテンプレートエンジンがあると便利です。Rob AがZend Frameworksアプリの短いタグをエスケープするための簡単なハックを書いたと思います。PHPを読みやすくするために短いタグが必要な場合。では、Smartyの方が良いオプションでしょうか?

{$myString|escape}

私よりよく見える

<?= htmlspecialchars($myString) ?> 

10
ほとんどのPHPプログラマにとって、2番目のオプションは最初のオプションよりも理にかなっています。これは、私たちが使い慣れている実際のPHP関数だからです。PHPはすでにテンプレート言語です。Smartyが冗長IMOであるように、その上に別のテンプレート言語を追加します。
バグマグネット

3
Twigは、HTMLエスケープがデフォルトで有効になっているテンプレートエンジンですtwig.sensiolabs.org
mateusza

3

短いタグを使用する意味は何かを尋ねる必要があります。

入力が速くなります

MDCoreによると:

<?= タイピングよりもはるかに便利です <?php echo

はい、そうです。スクリプト全体で7文字* X回入力する手間が省けます。

ただし、スクリプトの設計、開発、記述に1時間、または10時間以上かかる場合、スクリプトの期間中、数秒で7文字をあちこちに入力しなかったことがどれほど重要であるでしょうか。

一部のコアまたはすべてのスクリプトが、短いタグがオンになっていない、またはオンになっているのに更新または誰かがiniファイル/サーバー構成を変更すると機能しなくなる可能性と比較して、他の可能性があります。

あなたが得る小さな利益は、潜在的な問題の深刻さを上回ることには近づきません。それは、あなたのサイトが機能していないか、さらに悪いことに、その一部だけが機能していないため、解決する頭痛です。

読みやすい

これは親しみやすさに依存します。
私はいつも見たり使ったりしてきました<?php echo。ですから、<?=読むのは難しくありませんが、私にはなじみがなく、読みやすくありません

フロントエンド/バックエンドの開発者のスプリットと(ほとんどの企業と同様に)、それらのテンプレートに取り組んでフロントエンド開発者がより多くのだろうおなじみ知っ<?=「PHPオープンタグとエコー」に等しいのですか?
私はほとんどがより論理的なものでより快適になると思います。つまり、明確なPHPオープンタグと、何が起こっているのか "エコー"- <?php echoです。

リスク評価の
問題=サイト全体またはコアスクリプトが機能しない。

問題の可能性は非常に低い +結果の重大度は非常に高い = 高リスク

結論

あなたはここで数秒を節約し、そこにいくつかの文字を入力する必要はありませんが、それのために多くのリスクを負い、結果としておそらく読みやすさを失うことになります。

フロントやバックエンドコーダーおなじみでは、<?=より多くの可能性を理解することです<?php echo、彼らしている標準のPHPのものとして、 -標準の<?phpオープンタグと非常によく「エコー」を知られています。
(フロントエンドのコーダーでも「エコー」を知っている必要があります。そうでないと、フレームワークによって提供されるコードに取り組んでいないだけです)。

逆の可能性は低いですが、誰かがPHPの短いタグの等号が「エコー」であると論理的に推測することはほとんどありません。


タイピングとは何の関係もありません。短いため、読みやすくなる可能性があります。読み取りに使用者が<?=読みます<?=読みに慣れた人よりも簡単に <?php echo読書を <?php echo
Pacerier 2015

@Pacerier Shorterは、単に=読みやすいだけではありません。私たちは皆違います。つまり、読みやすくなります。私が私の回答に書いているように、<?phpコード全体を通して何度も私に親しみがあることに慣れているので<?=-親しみは物事をより簡単にします- 必ずしもより良いわけではありません。
ジェームズ

いいえ、私はあなたと私を比較しているのではありません。読書に慣れている人は、読書に慣れている人よりもよく読む<?=と言っています。つまり、Xの2つの同一のコピーがあり、一方がに使用され、もう一方が<?=<?php echo<?php echo<?=<?php echo最初のコピーはx、目的の構文を使用して、読み取り中の読みやすさの値を達成できます。一方、2番目のコピーはy、目的の構文を読み取るときの読みやすさの値を実現できますx >= y
Pacerier 2015

ポイントを逃してはいけません。特定の人とは何の関係もないシステムの可能性について言及しています。qwertyキーボードでタイプする人はqwertyでタイプするのが速くなりますが、dvorakでタイプする人はdvorakでタイプするのが速くなりますが、2つのシステムの可能性が異なることは変わりません。
ペーチェリエ2015

3

それに直面しよう。PHPは短いタグがないと地獄のように醜いです。

にアクセスできない.htaccess場合は、ファイルで有効にすることができますphp.ini

php_flag short_open_tag on

3
いいえ。時々、サーバーはあらゆる種類のオーバーライドを拒否するように設定されています。
Alfabravo

17
確かに、しかしあなたのホストがhtaccessで上書きすることを許可しないなら、あなたは本当に新しいホストが必要です!:)
ブライアンレイシー

1
コマンドラインインターフェイスでは機能せず、
php_flag

3

移植性の問題を回避するには、PHPタグをで開始し<?phpます。PHPファイルが純粋にPHPであり、HTMLではない場合、終了タグを使用する必要はありません。


2
  • 短いタグは、サーバーがサポートしていて、開発者がそれを理解している場合に使用できます。
  • 多くのサーバーはそれをサポートしておらず、多くの開発者は一度見れば理解できます。
  • 私は完全なタグを使用して移植性を確保しています。

そうは言っても、私の友人は、asp.tagsと呼ばれるphp.iniの設定であるではなく、のような代替の標準化された aspスタイルのタグをサポートするためにこれを言っています。ここに彼の推論があります:<%<?

... 任意の規則を標準化する必要があります。つまり、私たちのプログラミング言語がそれ自体を区別するために使用する必要がある奇妙な句読点など、すべて等しい価値のある一連の可能性に直面しているときはいつでも、1つの標準的な方法を選び、それに固執する必要があります。このようにして、すべての言語(または慣習が関係するあらゆるもの)の学習曲線を減らします。

私には良さそうに聞こえますが、私たちは誰もこの原因をワゴンに丸めることができないと思います。その間、私は十分にこだわるでしょう<?php


2

PHP 7の時点で、次の点に言及する価値があると思いました。

  • 短いASP PHPタグ<% … %>がなくなった
  • がtrueに設定されている<? … ?>場合、短いPHPタブは引き続き使用できshort_open_tagます。これがデフォルトです。
  • PHP 5.4以降、設定に関係なく、Short Printタグ<?=… ?>常に有効になっていshort_open_tagます。

他の言語と干渉するため、最初の言語への良好なリダンダンス。

個人的な好みを除いて、短い印刷タグを使用しない理由は今はありません。

もちろん、PHP 5のレガシーバージョンと互換性のあるコードを記述している場合は、古いルールを守る必要がありますが、PHP 5.6より前のバージョンはサポートされなくなったことを覚えておいてください。

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


1
私が間違っていない限り、あなたの最初のポイントは間違っています。このドキュメントには、PHP 7.0.0から、短いPHPタグではなくASPタグがなくなったと記載されています。
改訂

@reformあなたは絶対的に正しいです。回答を編集します。ありがとう
Manngo 2018年

1

XSSが気になる場合は、<?= htmlspecialchars(…) ?>、短いタグが大きな違いを生むことはありませんので、ほとんどの時間を。

短くecho htmlspecialchars()してもh()としても、ほとんど常に毎回追加することを忘れないでください(そして、どのデータが事前にエスケープされているかを追跡しようとすると、エスケープされませんが無害ですが、間違いが起こりやすくなります)。

デフォルトで安全なテンプレートエンジンを使用して<?phpタグを作成します。


7
「<?php echo htmlspecialchars($ text、ENT_QUOTES、 'UTF-8');?> 1日に500回入力する場合は、Railsのように「h」という名前のショートカット関数を作成することができます。」< ?= h($ text)?> "は、テンプレートをスキャンするときに読みやすくなります
Alexander Malfait 2009

1
それは確かに良いですが、テンプレートエンジンでそれは単に$ {テキスト}または、そのような(そして、あなたが(Hを追加するために覚えておく必要はありません))とすることができる
Kornel

7
PHP自体はテンプレートエンジンです。短いタグの使用をやめると、テンプレートが冗長になりすぎるため、テンプレートエンジンが不適切になり始めます。
JosefSábl10年

1
@Alexander Malfait良いヒントです。ただし、<?=は必要ありません。関数にreturnの代わりに文字列をエコーさせるだけでよいので、<?php h( 'hello')?>と記述します。<?php _e( '')?>はそれほど悪くありません。
VladFr 2010年

1

<?php ?>このプログラミング言語の開発者はコア言語を大幅に更新したため、使用する方がはるかに優れています。短いタグと長いタグの違いを確認できます。

短いタグは薄い赤で強調表示され、長いタグは暗く強調表示されます。

ただし、たとえば何かをエコーすることは問題ありません<?=$variable;?>。しかし、より長いタグを好む。<?php echo $variable;?>


1

<?(後続スペースなし)を<?php(後続スペースあり)に変換します。

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

<?(末尾のスペースあり)を<?php(末尾のスペースを保持)に変換します。

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

1

ショートタグは常にphpで利用可能です。したがって、スクリプトの最初のステートメントをエコーする必要はありません

例:

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

   ?>

突然、単一のphpスクリプトを使用する必要があり、それを使用できるようになります。例:

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

1

2019年現在、私はここでの特定の回答に同意しません。長いタグを使用することをお勧めします

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

または短いエコータグ

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

理由:PSR-1基本コーディング標準で推奨されています

などの他の短いタグ<? /* code goes here */ ?>は推奨されません。

スペックは言う:

PHPコードは、長いタグまたは短いエコータグを使用する必要があります。他のタグのバリエーションを使用してはなりません


1

3つのタグがphpで利用可能です:

  1. <?php ?>設定されたものを指示する必要のない長い形式のタグ
  2. short_open_tagがその<? ?> php.iniのshort_open_tagがオプションが利用可能である場合
  3. <?= PHP 5.4.0以降、タグは常に利用可能です。

php 7.0.0からaspとスクリプトタグが削除されました


それは質問に答えません。
RalfFriedl

-5

いいえ、それらはPHP 6で段階的に廃止されます。そのため、コードの寿命を長く評価したい場合は、単純にそれらや<% ... %>タグを使用しないでください。


4
ASPスタイルの短いタグだけで、廃止される予定はないという他のブログ投稿を見てきました。
MDCore 2008年

22
この答えが間違っているようですPHP開発者会議から、このリンクによると、なります。php.net/~derick/...
チャールズ・

7
なぜそんなに悪いのか、なぜ?誰もが自信を持っているので、自分たちが何者なのかはわかりませんが、理由は誰にもわかりません。
JosefSábl、2009年

6
偽。<%%>タグを段階的に廃止しています。それらは混乱する以外に目的はありません。<??>タグは影響を受けません。もちろん、これらはサーバーごとに構成可能であり、ターゲットプラットフォームの要件に常に注意する必要があります。
Brian Lacy

6
この情報は不正確で誤解を招くようであり、作成者が修正する必要があります。
tex
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.