質問

PHPにテキストを挿入するより短い方法があるかどうか疑問に思っています

<?php
$city = "London";
?>
This website is a funky guide to <?php print $city; ?>!!!

たとえば、レール上のルビーを使用して、設定できます

city = 'London'

コード内のどこか、および.erbファイル内でできること

This website is a funky guide to <%= city %>!!!

{$city}を使用できることをどこかで読みましたが、試しましたが、しませんでした。 <?php print $var; ?>より短い形式はありますか?

役に立ちましたか?

解決

short_open_tag は、構成で有効にする必要がありますが、有効になっている場合にのみ機能し、常に(デフォルトではない場合もあります)

長いタグとecho / printを使用すると、時間がかかる場合があります。はい...しかし、短いタグではなく、これらを使用することをお勧めします。


また、信頼できないソースからのデータや、ページに挿入したくないHTMLが含まれている場合は、HTML / JSの挿入を避けるためにデータをエスケープする必要がある場合があることに注意してください htmlspecialchars


コメントの後に編集し、developmentに関するいくつかの項目を追加します:

なぜ短いオープンタグが(少なくとも私は^^)悪い習慣と見なされるのですか?

まず、いくつかのチェックの後、デフォルトでは有効になりません:

PHP 5.3の場合:

squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-development
; short_open_tag
short_open_tag = Off
squale@shark:~/temp/php/php-5.3.0
$ grep 'short_open_tag' php.ini-production
; short_open_tag
short_open_tag = Off

<!> quot; production <!> quot;のいずれかでデフォルトで無効になっています。または<!> quot; recommended <!> quot;設定。

PHP 5.2.10の場合 (PHP 5.2の最新バージョン)

squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-dist
short_open_tag = On
squale@shark:~/temp/php/php-5.2.10
$ grep 'short_open_tag' php.ini-recommended
; - short_open_tag = Off           [Portability]
short_open_tag = Off

<!> quot; <?xml <!> quotではデフォルトで無効になっています。設定


これらのデフォルト設定は、ホスティングサービスによって保持されることがしばしばある(??)を考慮すると、.phpがアクティブになっていることに依存することは危険です。
(私は自分が無効にされている問題に直面しています...そしてあなたがサーバーの管理者ではなく、それを変更する特権を必要としないとき、それは楽しくありません^^)

いくつかの数字が必要な場合は、クイック調査:<=>デフォルトでオンまたはオフをサポートしますか?
(科学的な証拠ではありませんが、公開するアプリケーションにそれらを使用することは危険である可能性があることを示しています)


あなたが言ったように、それらは、アクティブ化されると、XML宣言と競合します。

<?php echo '<?xml version="1.0" encoding="UTF-8" ?>'; ?>

短い開始タグが存在することを考慮し、使用するサーバーでアクティブ化される可能性がありますが、おそらく<=>は使用しないでください。悪い:-(


実際、PHP 5.2.10のphp.ini-recommendedを読んでください:

; Allow the <? tag.  Otherwise, only <?php and <script> tags are recognized.
; NOTE: Using short tags should be avoided when developing applications or
; libraries that are meant for redistribution, or deployment on PHP
; servers which are not under your control, because short tags may not
; be supported on the target server. For portable, redistributable code,
; be sure not to use short tags.

PHP 6のものはさらに興味深いものです:

; This directive determines whether or not PHP will recognize code between
; <? and ?> tags as PHP source which should be processed as such. It's been
; recommended for several years that you not use the short tag "short cut" and
; instead to use the full <?php and ?> tag combination. With the wide spread use
; of XML and use of these tags by other languages, the server can become easily
; confused and end up parsing the wrong code in the wrong context. But because
; this short cut has been a feature for such a long time, it's currently still
; supported for backwards compatibility, but we recommend you don't use them.

(PHP 5.3でも同じかもしれません。チェックしませんでした)


うわさがありました。短いオープンタグは削除できました。 PHP 6から。私が投稿したphp.iniの部分を考慮すると、おそらくそうではありません...しかし、それでも...


他の方向を指している引数を与えるには(結局のところ、正直言って)、短いオープンタグを使用するテンプレートファイル (only)はよくあることですテンプレートファイルを使用するZend Frameworkの例で行われます:

  

例とドキュメントでは、   PHPの短いタグを使用します。      

そうは言っても、多くの開発者は   完全なタグを使用して   検証または移植性。にとって   インスタンス、short_open_tagは無効です   php.ini.recommendedファイル内、および   ビュースクリプトでXMLをテンプレート化する場合、   短いオープンタグは   検証に失敗するテンプレート。

ソース

逆に、<=>ファイルの場合:

  

短いタグは許可されません。にとって   PHPコードのみを含むファイル、   終了タグは常に省略する必要があります

ソース


これらの情報がお役に立てば幸いです。また、コメントに対する何らかの回答をお寄せください:-)

他のヒント

PHPモードから切り替えた場合、変数を出力する唯一の方法は、再度切り替えて、上記のように出力することです。 PHPモードのままで、試した{}構造を使用できます。

<?php
$city = "London";
echo "This website is a funky guide to {$city}!!!";
?>
  

{$ city}を使用できることをどこかで読みました

Smarty などのテンプレートエンジンを使用する場合は、これを実行できます。チームで開発していて、一部のチームがPHPを知らない場合に便利です。

それ以外の場合、短いタグが有効になっていると仮定すると、最短になるのは次のとおりです。

<?=$city?>

そうでない場合、または他の人に再配布するアプリを作成している場合は、これを使用します:

<?php echo $city ?>

PHPブロックを拡張し、これを行うだけです:

<?php
$city = 'London';
echo 'This website is a funky guide to ',$city,' !!!';
?>

代わりに、<!> quot;を使用できます。 <!> quot; ''の代わりに',$city,'$cityに置き換えますが、変数の解析にはより多くのCPU時間を要します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top