533

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

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

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

<?=

入力するよりもはるかに便利です

<?php echo 

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

4

28 に答える 28

381

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

<?andはプログラマーにとってand<?=よりも簡単であることに同意しますが、毎回同じフォームを使用する限り、大量の検索と置換を実行できます (スペースを入れないでください (例:または)<?php<?php echo<? php<? =

私は読みやすさを理由としてまったく買わない。ほとんどの本格的な開発者は、構文を強調表示するオプションを利用できます。

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

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

于 2008-10-14T10:31:56.567 に答える
178

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

于 2008-10-14T23:14:10.930 に答える
147

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

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

于 2011-05-19T20:58:10.240 に答える
83

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

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

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

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

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

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

于 2009-12-21T23:16:31.430 に答える
35

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

アップデート

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

<?php and <?php echo

以上

<? and <?=

相互運用性を保証するための小さな作業のようです。

于 2008-10-21T21:45:15.287 に答える
23

XML宣言で混乱が生じる可能性があるためです。しかし、多くの人があなたに同意 ます。

追加の懸念は、すべてを短いタグでコーディングして、最終的なホスティングサーバーがそれらをオフにしていることを最後に発見することで生じる苦痛です...

于 2008-10-14T10:24:52.557 に答える
21

以下は、同じ素晴らしいフロー図です。

<?= の使用の意思決定ツリー

出典: Software Engineering Stack Exchange に関する同様の質問

于 2013-04-24T05:10:30.413 に答える
14

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

短いタグや ASP スタイルのタグは便利だと考える人もいますが、移植性が低く、一般的にはお勧めしません。

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

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

于 2011-05-30T11:34:03.193 に答える
12

注:PHP 5.4以降、短いタグ、、<?=が常に使用可能になりました。

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

  • 読みやすさが問題になる場合があります。多くの開発者は、特にHTMLと PHP が密接に織り交ぜられたコード ベースで立ち往生している場合、ファイルをスキャンするとき<?phpよりも、コード ブロックの開始を示すより明白なマーカーとして目を引くことに気付くかもしれません。<?

于 2008-10-14T10:25:10.700 に答える
6

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

一方、テンプレート内の(そしてテンプレート内のみの)短いタグは有用であるように思われることに同意しますが、問題は、ここでそれについて議論するのに非常に多くの時間を費やしたため、実際に無駄になるのに非常に長い時間がかかる可能性があることです「php」の余分な3文字を入力するのにそれだけの時間!!

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

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

オープンタグとクローズタグの4つのオプションがあり、特別な「エコー」タグがランダムに追加される時点で、PHPはphp.iniまたは.htaccessに「カスタムオープン/クローズタグ」フラグを設定することもできます。そうすれば、デザイナーは自分が一番好きなものを選ぶことができます。しかし、明らかな理由でそれはやり過ぎです。では、なぜ4つ以上のオプションを許可するのでしょうか。

于 2010-07-09T02:58:18.120 に答える
4

<?新しいバージョンではデフォルトで無効になっています。PHP で短いタグを有効にする で説明されているように、これを有効にすることができます。

于 2012-04-20T11:50:33.567 に答える
4

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

于 2012-11-06T21:06:05.230 に答える
4

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

私の2セント?コードを別の場所で実行する予定がない場合は、必要に応じてそれらを使用してください。それがばかげた考えだと気づいたときに、大規模な検索と置換を行う必要はありません。

于 2008-10-14T22:12:25.390 に答える
3

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

于 2011-05-30T11:39:04.370 に答える
3

短いタグを使用するポイントは何なのかを尋ねる必要があります。

入力が速くなる

MDCore は次のように述べています。

<?=入力するよりもはるかに便利です<?php echo

はい、そうです。スクリプト全体で 7 文字 * X 回入力する必要がなくなります。

ただし、スクリプトの設計、開発、および作成に 1 時間、または 10 時間、またはそれ以上かかる場合、スクリプトの実行中にあちこちで 7 文字を入力しない数秒の時間は、どの程度関連するのでしょうか?

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

あなたが得る小さな利益は、潜在的な問題の深刻さを上回るほどのものではありません.

読みやすい

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

また、(ほとんどの企業と同様に) フロントエンド開発者とバックエンド開発者の分割により、これらのテンプレートに取り組んでいるフロントエンド開発者は、「PHP のオープンタグとエコー」と同等であることを知っているのでしょうか? ほとんどの人は、より論理的な方が快適だと思います。つまり、明確な PHP の開始タグと、「エコー」が発生していることです。 <?=
<?php echo

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

問題の可能性が非常に低い+ 結果の深刻度が非常に高い=リスクが高い

結論

いくつかの文字を入力する必要がなく、あちこちで数秒節約できますが、それには多くのリスクがあり、結果として可読性が失われる可能性もあります。

に精通しているフロントエンドまたはバックエンドのコーダーは、標準的な PHP のもの (標準の開始タグと非常によく知られている "echo")であるため、<?=理解する可能性が高くなります。 (フロントエンドのコーダーでさえ、「エコー」を知っている必要があります。そうしないと、フレームワークによって提供されるコードに取り組んでいません)。 <?php echo<?php

逆の可能性は低いですが、PHP の短いタグの等号が「echo」であると論理的に推測する人はまずいないでしょう。

于 2014-03-09T17:01:53.573 に答える
3

それに直面しよう。PHP は、短いタグがなければ非常に醜いものです。

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

php_flag short_open_tag on
于 2009-11-08T19:46:15.840 に答える
3

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

{$myString|escape}

私にはそれがより良く見えます

<?= htmlspecialchars($myString) ?> 
于 2011-04-13T16:51:31.800 に答える
2
  • 短いタグは、サーバーがそれをサポートし、開発者がそれを理解することが確実な場合に使用できます。
  • 多くのサーバーはそれをサポートしておらず、多くの開発者は一度見ればそれを理解するでしょう。
  • 移植性を確保するために完全なタグを使用しています。それほど悪くはないからです。

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

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

私には良さそうに聞こえますが、私たちの誰もがこの原因の周りにワゴンを一周することはできないと思います。その間、私は完全に固執するでしょう<?php

于 2009-08-10T18:41:38.973 に答える
1

XSSを気にする場合は、ほとんどの場合を使用する必要が<?= htmlspecialchars(…) ?>あるため、短いタグは大きな違いにはなりません。

に短縮echo htmlspecialchars()してh()も、ほぼ毎回追加することを忘れないでください(そして、どのデータが事前にエスケープされているか、どのデータがエスケープされていないかを追跡しようとすると、間違いが発生する可能性が高くなります)。

デフォルトで安全なテンプレートエンジンを使用しており、<?phpタグを書き込んでくれます。

于 2008-10-21T21:27:18.160 に答える
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'
于 2015-11-29T06:12:51.223 に答える
1

<?php ?>このプログラミング言語の開発者はコア言語を大幅に更新したため、はるかに使いやすくなっています。短いタグと長いタグの違いがわかります。

短いタグは明るい赤で強調表示され、長いタグは濃い色で強調表示されます!

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

于 2015-10-14T01:16:07.430 に答える
-5

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

于 2008-10-16T01:19:26.447 に答える