web-dev-qa-db-ja.com

PHPで<?=タグを使用するのは悪い習慣ですか?

私はこれに遭遇しましたPHPタグ<?= ?>最近、私はそれを使用することに消極的ですが、それはあなたがそれを引き受けてほしかったので、とてもかゆいです。短いタグを使用することは悪い習慣であることを知っています<? ?>および完全なタグを使用する必要があること<?php ?>代わりに、これはどうですか:<?= ?>

それはいくつかのタイピングを節約し、コードを読みやすくするために優れています、IMO。したがって、これの代わりに:

<input name="someVar" value="<?php echo $someVar; ?>">

私はそれをこのように書くことができました、それはよりきれいです:

<input name="someVar" value="<?= $someVar ?>">

この演算子の使用は嫌われていますか?

200
marco-fiset

歴史

誤報列車が駅の外に出る前に、PHP短いタグについて理解する必要のあることがたくさんあります。

PHPの短いタグの主な問題は、PHP別の構文で使用されていたタグ(<?)を選択して管理したことです[〜# 〜] xml [〜#〜]

このオプションが有効になっていると、構文エラーが発生せずにxml宣言をraw出力できませんでした。

<?xml version="1.0" encoding="UTF-8" ?>

これは、XMLの解析と管理の一般的な方法を考えると、大きな問題です。

<?=はどうですか?

<?はxmlとの競合を引き起こしますが、<?=はそうではありません。残念ながら、オンとオフを切り替えるオプションは short_open_tag に関連付けられていました。つまり、短いエコータグ(<?=)のメリットを得るには、短い開始タグ(<?)の問題が原因です。短いオープンタグに関連する問題は、短いエコータグの利点よりもはるかに大きかったので、short_open_tagをオフにするための100万回の推奨事項を見つけることができます

PHP 5.4を使用すると、short_open_tagオプションとは別に、短いエコータグが再度有効になりました。これは、<?=の利便性を直接裏付けしていると思います。それ自体には根本的な問題は何もないので。

問題は、PHPバージョンのより広い範囲で機能する可能性のあるコードを記述しようとしている場合、<?=があることを保証できないことです。

わかりました、それで今それはすべての方法です

<?=を使用する必要がありますか?

flowchart about whether or not to use the short echo tag

220
zzzzBov

私の発塵PHP hat

冗長なecho(単に個人的な好み)よりも<?= $someVar ?>の使用をお勧めします。 onlyの欠点AFAIKは5.4.0より前のバージョンを実行しているユーザー向けです。この場合、short_open_tagphp.ini

さて、あなたのプロジェクトがOSでないなら、それは議論の余地があります。もしそうなら、私はshort_open_tagsを有効にする必要があるという事実を文書化するか、2つの解決策のうちより移植性の高いものを使用します。

30
Demian Brecht

<?であろうと<?=であろうと、短い形式のタグは避けてください。

主な技術的理由は移植性です。ショートフォームタグは無効にすることができるため、指定されたすべての設定で機能するかどうかは決してわかりません。short_open_tagディレクティブを参照してください。しかし、長い形式がどこでも機能することを常に確信できます。

それはいくつかのタイピングを節約し、コードを読みやすくするために優れています、IMO。

それも悪い習慣です。読みやすいとは言えませんが、コードを読みやすくすることで、キーストロークをいくつか節約するための言い訳に熱心に反対します。読みやすさが気になる場合は、テンプレートエンジンを使用してください。

<input name="someVar" value="{someVar}">

あなたの両方の例からはるかに読みやすいです。

最後に、短い形式のタグは、メジャーPHPプロジェクト、たとえば [〜#〜] pear [〜#〜] および Zend Framework

21
yannis

PHP-Documentation は、短いエコータグを安全に使用できることを明確に示しています。

5.4.0 The tag <?= is always available regardless of the short_open_tag ini setting.

これはPHPバージョン5.4以降用ですが、少なくともこれを使用する必要があります。テンプレート目的でのみ使用することをお勧めします。

15
Hexodus

短いタグを使用する理由:

  • 彼らは短いです。

短いタグを使用するnotの理由:

  • 彼らはもう1つの設定の落とし穴を導入します-プロのコンテキストでほとんどの時間サーバーを制御しますが、コードを一般に公開することを計画している場合、短いタグは、共有ホスティングなどでそれを使用する人々にとって修復不可能に壊れる可能性があります。
  • それらは、サニタイズされていない文字列を出力にさりげなくドロップすることを非常に簡単にします。 XSSの脆弱性をもたらす可能性があるため、これは恐ろしいことです。長いタグはこれを防ぐために直接何もしませんが、彼らがしていることはおそらく正しいことではないことをプログラマーに知らせ、HTMLエンコードを自動的に処理するテンプレートシステムの使用を開始する必要がありますright今。長いタグを持つ動的文字列を出力するのは面倒です。これは良い(教育的な)ことです。
10
tdammers

_<?=_バージョンは、変数の最終出力のみに使用し、データの表示

確かにどこでも<? echo($x); ?>よりはるかに優れています。

長期的には、 Smarty などのテンプレートエンジンを検討することをお勧めします。

4
Darien

PHP 7.4以降、プレイフィールドは少し変化します。

<? ?>は正式に廃止予定であり、PHP 8.0で削除される予定です。

PHP RFC:非推奨PHP短いオープンタグ は、明示的に<?= ?>は影響を受けません。これは(RFCではなく、私によれば)その使用が推奨されていないことを示します。

3
Etienne Bruines