2017-10-16 10 views
-5

このPHPのタグの中でecho "example"と "example"の違いはありますか?

<?php 
    myCode(); 
    echo "Example"; 
?> 

<?php 
    myCode(); 
?> 
Example 

この違いはありますか?

パフォーマンス面ではどのような選択肢がありますか?

「例」を20000000回印刷したベンチマークを実行しました。私はHTTPリクエスト(CentOS 7 64bit)ではなく、CLIからスクリプトを実行しました。 "エコー" を使用して

:153.06723901367sec

使用してHTML:すべての実用的な目的のために155.80555395508sec

+0

**ビュー**とはどういう意味ですか? – Swellar

+5

実際的な違いはありません。もっと読みやすいものを使ってください。 – JJJ

+0

@shashi私は理解していない:両方の作品。違いがあるかどうかを知りたい(パフォーマンス、システムコール、ecc)。なぜ皆さんがダウン投票しているのですか? – TheDeveloper

答えて

5

は、なし、該当違いはありません。どちらの場合も、スクリプトの出力は「例」になります。そして、どちらの場合もmyCode()は以前に実行されました。

実際、PHPは<?phpタグの外側のすべてをエコーするので、どちらの場合もOPCodeは同じになります。基本的に暗黙のエコーです。

技術的には、結果として得られるOPCodeの方法は異なりますが、これはパフォーマンスには影響しません。 <?phpタグ以外のものはほとんどがパーサーによってT_INLINE_HTMLとして扱われます。これはその後、converted to an echo in the abstract syntax tree次のとおりです。

| T_INLINE_HTML { $$ = zend_ast_create(ZEND_AST_ECHO, $1); } 

ZEND_AST_ECHO

case ZEND_AST_ECHO: 
APPEND_NODE_1("echo"); 

ていると、あなたならば、それは簡単スパゲッティコードにつながることができますしかし、あなたの目的は、可能な限り良いとしてあなたの意見やテンプレートから別のロジックにする必要がありますしないでください。経験則として、関数はエコーするのではなく、文字列を返すべきです。ほとんどのフレームワークは、応答をレンダリングするときにリクエストの最後に1回だけエコーします。

「ビュー」とMVCについて述べているので、MVCのビューは必ずしもテンプレートではなく、モデルからの特定のデータの特定の表現です。最終的にテンプレートをレンダリングするコードにすることもできます。もしそれがあなたが望むなら、おそらくTwigのようなテンプレートエンジンをチェックアウトしたいと思うでしょう(PHPはそれ自身のテンプレートエンジンです)。

+0

はい。私は通常、SmartyをPHPで使用し、HandlebarはJSで使用します。それはパフォーマンスについての唯一の質問だった、私はスパゲッティコードのようなロジックの中でビューを使用することはありません:) – TheDeveloper

+1

@TheDeveloperパフォーマンス賢明な違いはありません。また、パフォーマンスについて質問するときは、有意義な数値を得るために、アプリケーションのコンテキストで自分自身に有利とベンチマークを行います。 – Gordon

+0

これでベンチマークを行います。 – TheDeveloper

-2

はい。 1番目はPHP、2番目はHTMLです。

最初のケースでは、あなたが行うことができます:

<?php 
$var = 1; 
echo "Example " . $var; 
?> 

二ケース$varはとても無視されますHTMLで定義されていません。

<?php 
$var = 1; 
?> 
Example $var 

あなたが戻ってPHPに行く必要があるだろうHTMLでその変数を使用したい場合、すなわち

<?php echo $var; ?> 

これは私の経験で好みのもので、主にHTMLいくつかのページがありますそのように書くことができます。しかし、私がPHPを書いているのであれば、私はPHPに固執し、2つの言語の間でバウンスするのが好きではありません。私はあなたがPHPで作ることができないHTMLでできることは何も知らない。これはデバッグが難しい見苦しいコードを作成します。
また、HTMLヘッダーに問題があります(PHP header()機能参照)。

+3

両方の場合のOPCodeはまったく同じになります。 – Gordon