2017-02-27 5 views
0

私は新しくなったPHPフレームワーク(Laravel 4)でreturnの使用に遭遇しました。PHPのreturnディレクティブのアプリケーションとは何ですか?

次のように私は、それが何をするかを理解する:

# contents of file A 
<?php 
//this is fileA.php 
echo '<pre>'; 
echo "here is from file A\n"; 
$output = require('fileB.php'); 
echo $output; // "Hi, I am the return value from file B" 
?> 

# contents of file B 
<?php 
echo "Hi, I am content inside file B\n"; 
$return = "Hi, I am the return value from file B"; 
return $return; //terminate page processing.. 
//should not show 
echo "I bet you don't see me\n"; 
<?php 

上記出力:(!thinkableあるいは神の緑の地球上)

Here is from file A 
Hi, I am content inside file B 
Hi, I am return value from file B 

を私の質問は、それが賢明であるときに、ありますこのようなものを使用しますか?

これは関数内でreturnと似ていますが、インクルードされたファイルを基本的に「準関数」にし、オブジェクト指向(または手続き型)コーディングの間に線をぼかし、本質的にファイルをメソッドまたはクラス。

また、私はそのようなことがいつおかしいのだろうと思いますOVER OOPアプリケーション。

ああ、とLaravelは

+0

これはLaravelと何が関係していますか? – Ohgodwhy

+0

TAYQ、それはLaravel 4のみでかなり使用されているという事実。たぶんおそらく、Laravelの開発者がこれを使用した理由について、誰かが役に立つ設計上のコメントがあるかもしれません。私はまだこれのようなものを見つけていないことを知っています。 –

答えて

3

それはあなたがそこに見て、それが関係しLaravelはありませんが、厳密にはPHP関連(とOOPではない正確に何である...ので、多くの場合、これを実装する際に念頭に置いて、特定のアイデアを持っていましたこれは全く関係がなく、の代替などのようなものではありません)。 docsから

グローバルスコープから呼び出された場合は、現在のスクリプトファイルの実行は終了されます。 現在のスクリプトファイルが含まれているか、または必要な場合は、制御は呼び出し元のファイルに戻されます。さらに、現在のスクリプトファイルが含まれていた場合、返される値はインクルード呼び出しの値として返されます。

通常、設定ファイルを使用して設定を定義して返します。 configのコンシューマはファイルをインクルードし、インクルードされた/必要なファイルの詳細にアクセスしたり知ったりすることなく、返された値を使用することができます。

例えば、あなたが遭遇するだろうパターンはの線に沿って何かになります:

// config.php 
return [ 
    'config_key' => 'config_value' 
]; 

// config.consummer.php 
$config = include "config.php"; 

今、あなたは$configで結果の配列を持っており、必要に応じて、あなたの設定ファイルにロジックのビットを含むことができ、あなたのアプリケーションはあなたの設定ファイルについて何も知らなくても、 "配列を返します"。

取り組むいくつかのコメント

直接PHPの処理設定ファイルの利点のカップルがあります:あなたは、いくつかの適度なロジックの量(realpath、いくつかの基本的な算術演算を考える)、IDEのサポートを組み込むことができ、必要はありません新しい言語/マークアップを学び、最も重要なのはopcachingです。

いくつかのフレームワークでは、よりシンプルで制限された言語(yaml、xmlなど)を使用して、この構成を最初の実行時にPHPにプリコンパイル/キャッシュして、 PHPファイルを使用することによるパフォーマンス上の利点

しかし、あなたが何をしていても、あなたの設定がPHPファイルから来た場合、/ requireがインクルードされています。誰もあなたがこのファイルをウィル・ニーリーに含めるべきだと言っているわけではありません、私はOPが見つかったこの種のものがなぜ行われたのかを説明していました。

また、これは、対話または手続き型プログラミングとは何も関係ありません。これは、PHPが提供するちょうど慣用的な機能であり、合理的かつ便利なときにいつでも使用できます。

+0

個人的に私はこれを見て悲しい悲しみの涙を叫ぶだろう。私はこの「パターン」を一切使用していませんが、これは質問のための非常に良い答えです(下降記号はありません)。これを使わないことを強くお勧めします:) – Nanne

+0

これは、例えばZF2構成ファイル(他の場所の間ではまったくまれではありません)。それは非常に有効な使用法、IMOを持っています。 – yivi

+0

それは味の問題かもしれませんが、一見「ランダム」なものが隠されているように見えますが、それは本当に私にうずまきを与えます。しかし、この機能を必要としないより良い設定オプションがあるので、私はまだこれを使用することに反対します。しかし、再び、それは個人的なものか、あるいは多分「文化的」(プログラミングの際に同僚と慣れ親しんでいるように)ものです。しかし、もう一度、この答えに間違って何も、私はちょうど私の気持ちを言及したい。ここでは、私の暴言を補うためにupvoteを持っています:) – Nanne

関連する問題