web-dev-qa-db-ja.com

PHP短いタグは使用可能ですか。

これが情報です 公式のドキュメントによると

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

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

<?=

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

<?php echo 

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

513
MDCore

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

<?<?=は、<?php<?php echoよりもプログラマーの方が簡単ですが、同じものを使用する限り、一括検索と置換を行うことができます。毎回作成します(スペースに挟まないでください(例:<? phpまたは<? =

読みやすさを理由として購入しません。ほとんどの真面目な開発者には、構文強調表示のオプションが用意されています。

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

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

371
Oli

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

171

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

そのため、エコーショートカット自体(<?=)を使用しても安全です。

140
dukeofgaming

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

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

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

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

そして私達は決して私達にサーバー設定の絶対的なコントロールを与えないホスティングプロバイダーと仕事をすることがありません - そのような場合私達は短いタグサポートを失うことよりずっと多くの問題に走ることに頼ることができます。それは起こりません。

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

80
Brian Lacy

短いタグは Zend Framework のおかげで " テンプレート言語としてのPHP "をプッシュする デフォルトのMVC設定 私は議論がどうなっているのかわかりません、あなたがあなたの一生の間に作り出すソフトウェアの大部分はあなたまたはあなたの会社が管理するサーバ上で動作するでしょう。あなたが一貫している限り、問題はないはずです。

UPDATE

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

<?php and <?php echo

オーバー

<? and <?=

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

33
Jake McGraw

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

もう一つの懸念は、最後のホスティングサーバーがそれらをオフにしていることを最後に見つけるためだけに短いタグですべてをコード化することが生み出す痛みです...

20
Vinko Vrsalovic

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

decision making tree of the use of <?=

出典: Software Engineering Stack Exchangeに関するよくある質問

19
Sumoanand

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

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

そして

xMLまたはXHTMLにPHPを埋め込む場合は、標準に準拠するために<?php ?>タグを使用する必要があります。

そして

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

13

だれかがまだこれに注意を払っている場合... PHP 5.4.0 Alpha 1以降<?=は常に利用可能です:

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

そのため、短いタグは(a)許容され、(b)ここに留まるように見えます。少なくとも今のところ...

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

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

12
ConroyP

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

10
brunoais

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

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

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

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

開始タグと終了タグに4つのオプションがあり、特別な "echo"タグをランダムに追加した時点で、PHPにはphp.iniに "custom open/close tags"フラグがあるかもしれません。 .htaccessこのようにして、デザイナーは自分の好きなものを選ぶことができます。しかし明らかな理由からやり過ぎです。では、なぜ4つ以上のオプションを許可するのでしょうか。

5
Daniel Ross

少し異なる状況の1つは、 CodeIgniter アプリケーションを開発するときです。 CodeIgniterはテンプレート/ビューでPHPが使われているときはいつも短いタグを使っているように見えます。そうでなければモデルとコントローラでは常に長いタグを使います。それはフレームワークの中の厳格で速いルールではありませんが、フレームワークと他の用途からの多くのソースはこの規約に従います。

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

3
patricksweeney

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

3
AnkTech Devops

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

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

php_flag short_open_tag on
3
Jimmer

別々のビューファイルを持つMVCフレームワークまたはCMSで作業するときにそれらを使用するのは良いことです。
それは速くてコードが少なくて済み、デザイナーを混乱させません。あなたのサーバー設定がそれらを使用できることを確認してください。

3
Greg

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

{$myString|escape}

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

<?= htmlspecialchars($myString) ?> 
2
Adrian Judd

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

2
Kumar
  • 短いタグは、サーバーで確実にサポートされていること、および開発者が理解していることが確実な場合に使用できます。
  • 多くのサーバはそれをサポートしていません、そして多くの開発者は一度それを見た後それを理解するでしょう。
  • 移植性を確保するためにフルタグを使用しています。それほど悪いことではありません。

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

... 任意の規約を標準化する必要があります。つまり、プログラミング言語がそれ自体を明確に区別するために使用するべき奇妙な句読点など、すべて同じ価値の可能性のあるセットに直面しているときはいつでも、1つの標準的な方法を選択してそれに固執する必要があります。そうすることで、私たちはすべての言語の習熟曲線を減らすことができます。

私には良いように思えますが、私たちの誰もがこの原因の周りに貨車を囲むことができるとは思いません。それまでの間、私は完全な<?phpに固執するでしょう。

1
stereoscott

(末尾スペースなしの)<?を(末尾スペース付きの)<?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
Fatih Akgun

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

  • 短いASP PHPタグ<% … %>はなくなりました
  • <? … ?>がtrueに設定されている場合でも、短いPHPタブshort_open_tagは利用可能です。これがデフォルトです。
  • PHP 5.4以降、短い印刷タグ<?=… ?>は、short_open_tag設定に関係なく常に有効になります。

それが他の言語と干渉したので、最初のものへの良い片付け。

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

もちろん、レガシーバージョンのPHP 5と互換性のあるコードを書いているのであれば、古いルールに固執する必要がありますが、PHP 5.6より前のものはすべてです。サポートされていません。

参照してください: https://secure.php.net/manual/en/language.basic-syntax.phptags.php

1
Manngo

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

たとえecho htmlspecialchars()h()に短縮したとしても、ほとんど毎回それを追加することを忘れないでください(そしてエスケープされているデータを追跡しようと試みることは間違いを犯しやすくするだけです)。

私は テンプレートエンジン を使います。これはデフォルトで安全で、私のために<?phpタグを書きます。

0
Kornel

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

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

しかし、何かをエコーアウトしてください、例えば:<?=$variable;?>は問題ありません。しかしより長いタグを好む。 <?php echo $variable;?>

0
M50Scripts

短いタグは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>
0
GaziAnis