2011-08-13 21 views
0

静的変数をグローバルに維持する必要がある状況があります。ここでは、値が異なるPHPファイルによって変更される可能性があります。PHP静的変数が設定されていません

私は

<?php 
class FlagMe { 
    public static $flag; 

    public static function setFlag($flag) { 
     self::$flag = $flag; 
    } 

    public static function getFlag() { 

     return self::$flag; 
    } 
} 
?> 

、クラスの下にあると私は(、以下のようなdiferent PHPファイルから値を設定

FlagMe::setFlag("SomeValue"); 

しかし、同じPHPスクリプトでポスト要求コードの流れの後としていますコントローラクラス)をページリフレッシュして、静的変数にアクセスしようとすると、前に設定値 "SomeValue"を与える代わりに私に与えられます。

$temVar = FlagMe::getFlag(); // gives null 

私はここで紛失していますか?

ありがとうございました。

答えて

3

ページが更新されると、スクリプトの新しい実行が発生します。オブジェクトインスタンス/クラス変数は、異なる実行間で保存されません。

変数を保存する場合は、sessionまたはcookieに保存します。次に、実行ごとにセッションをチェックし、それに応じて変数を設定します。

0
$tempVar = FlagMe::setFlag("SomeValue"); 

setFlag関数が値を返さないため、間違っています。 FlagMe::setFlag("SomeValue");のみを使用する必要があります。

はフラグで何が起こっているか見るためにsetFlagにエコー"setFlag value is ".$flagを追加してください。

とにかく私はあなたの問題は、データの変更を更新した後だと思います。ページ間で情報を保存するには、セッションを使用する必要があります。

+0

これは問題ではない –

3

2つの要求は、スクリプトの2回の実行と、2つの異なるメモリ空間を意味します。最初のリクエストの最後に、最初のスクリプトが終了し、メモリ内で行われたすべての変更が忘れられます。 2番目のスクリプトは最初からすべての変数がデフォルト値を持ちます。

変数は、現在のユーザーにリンクされている場合は、セッションに格納する必要があります。それ以外の場合は、ファイルまたはデータベースに格納する必要があります。

4

HTTPは、ページ要求間で保存されていないユーザーのデータを意味しステートレスなプロトコルです。

あなたがセッションやクッキーを使用する必要があり、複数ページにわたる変数を保存したい場合。

+4

HTTPにはステートレスではありません。これは、PHPがリクエストごとに1つのプロセスを持つという事実に関連しています。たとえば、Java Webアプリケーションでは、すべての要求に対して同じプロセスが使用され、このコードが機能します。 –

+0

ああ、ok。それを知らなかった:) – maartencls

関連する問題