2012-02-04 10 views
2

私は小さな非商用Webアプリケーションを作成しています。コードの一部から他の部分にデータを渡す方法が不思議です。具体的には、状況に応じて(「ログインしています」、「ログアウトしました」、「状況が更新されました」など)、さまざまなメッセージをユーザーに出力します。 (現時点では、私はいくつかのメッセージを記憶しておく必要があるケースは見当たりませんが、実際には関係ありません。)$_SESSION['message']変数を使ってコードを構造化することができます。 class Message、または1つのphpファイルから次の文字列変数までです。

一方のアプローチではなくもう一方のアプローチを使用する魅力的な理由があるかどうかはわかりません。

EDIT:上記の「コードの一部」は、実行する関数と表示するものを決定するMVCコントローラです。その後、フロントコントローラーにリダイレクトされるため、インスタンスが変更されます。フロントコントローラはビ​​ューをロードします。

+0

これらの「コード」は何ですか?同じインスタンス内で実行されているかどうか –

答えて

2

質問はあまり意味がありません。

異なるPHPインスタンス(たとえば、ログインが成功した後にリダイレクトを行った場合など)について話をしている場合は、ちょっとした選択肢があります。

同じPHPスクリプトインスタンス内のコード部分間でメッセージを渡すことについて話している場合、セッションにはまったく使用されません。

+0

はい、キー操作(ログインの成功、登録など)をフロントコントローラにリダイレクトします。 – JDelage

+0

さて、このリダイレクトの後、あなたのクラスはすべて死んでしまい、どこにも何も渡されません。セッションはここであなたの唯一の選択です –

+0

それを得ました。ありがとうございました。 – JDelage

2

Messageオブジェクトを渡すことで、メッセージを使用するすべてのコードを調整することなく、実装方法を変更できます。 $_SESSION変数を直接使用すると、実装につながります。

私は一般的にアプリケーション内のどこでも直接使用することを避けようとしていますが、コア "ブートストラップ"手順を除きます。それはグローバル変数であり、それらは本質的に一般的に悪です。

+0

おそらく私は '$ _SESSION'にMessageオブジェクトを含めることができました...グローバル変数の邪悪について読んだことがありますが、私はそれを完全に理解していません。特に、私が読んだことのいくつかは、 '$ _SESSION'が他のグローバルと同じくらい悪くないことを暗示しているようです。 – JDelage

+0

@JDelage PHPの超球体はどれも悪ではありません。しかし、これらの配列の*誤用*は実際には悪いです。セッションは、HTTPリクエスト間の状態を保持するためにのみ使用してください。モジュール間で通信するためには、何らかのクラスメッセンジャーを作成する必要があります。 –

+0

'$ _SESSION'は、ページ間でデータを永続化することが必須であるという意味で悪いことではありません。問題は、アプリケーション内でどのように使用するかということになります。'$ _SESSION'データをスクリプトの始めにアプリケーションオブジェクトに"変換 "するか、アプリケーション全体で直接使用します。直接的な使用法は簡単です(また間違ってはなりません)が、大規模なアプリケーションでは維持しにくいコードにつながる可能性があります。 – Matthew

2

あなたが説明しているのは依存性注入モデルではなく、シングルトンモデルです(これはクラスのインスタンス全体を渡します)。依存性の注入は、あなたのユーザーのための認証機能を持っている場合、あなたはデータベース接続ユーザー、およびパスワードが必要になるという意味、実行するために、各特定オブジェクト/機能のために何必要を渡すことについてです。したがって、あなたのコードは次のようになります:

function auth($db_conn, $user, $pass) { 

あなたのケースでは、メッセージをユーザーに表示するために、セッションアプローチを使用します。

+0

私のケースでは、機能するコードの1つが表示されるメッセージ(もしあれば)を決定するので、コードの部分が動作するようにメッセージが必要です。 – JDelage

関連する問題