2011-08-27 4 views
2

を保持し、PHPで行うことがよりではないので、私が説明することができます読みください。 WordPressプラグインは、init()関数が呼び出されるように接続されています...これは私が一度呼び出されることを確認できます。PHP静的メンバは、こんにちは、私は書いていますワードプレスのプラグインが、ワードプレス自体については、このありえないとの奇妙な問題を抱えている値

class MyClass 
{ 
    static $i=0; 

    public static function init() 
    { 
    self::$i++; 
    } 

    public static function dosomething() 
    { 
    echo 'i is = ' . self::$i; 
    } 
} 

Wordpress内からdosomething()を初めて呼び出すと問題ありません。私は上記のクラスを含む別のajax-response.phpファイルを持っていて、再びi値= 1を出力するdosomethingを呼び出します。

ajax-response.phpスクリプトで呼び出すとi値が問題になります0?

そのことは全く異なるメモリ空間で実行し、新たなプログラムを作成し、複数のウェブ・スレッドとは対照的に、静的メンバ変数は、同じプロセスの間で共有されているようなものであるかのように。

アイデア?事前に

おかげで、

クリス

+0

そうです。静的メンバーの状態は、異なるWebサーバー要求間で永続的ではありません。そのような振る舞いが必要な場合は、別の方法でこれを行う必要があります。データベース、キャッシング、セッション、クッキーなどなど – sberry

+0

返事をいただきありがとうございました – g18c

答えて

2

そのことは全く別のメモリ空間で実行し、新しいプログラムを作成しているかのように、対照的に、静的メンバ変数は、同じプロセス間で共有されるように正確

threads.`複数のWebへ! :)これは100%の仕組みです。各PHPリクエストは独自のメモリを持つ新しいものです。 staticキーワードは、それを回避するようには設計されていません。

Webアプリケーションで複数のプロセス/リクエスト間のものを保持したい場合は、sessionsを使用する必要があります。

1

Ajaxリクエストは別のリクエストです。そのため、新しい変数があるのはなぜですか?
リクエスト間に値を格納するためにセッションを使用できます。

1

このセッションでセッションが必要な場合があります。変数は現在のインスタンスにのみ格納されるため、別のスクリプトを呼び出してMyClassクラスのインスタンスを作成すると、すべてのプロパティがデフォルトに設定されます。

1

これは間違いありません。異なるプロセス間で変数がアクティブになることはありません。各プロセスには変数のコピーがあります。ここでは多くの選択肢があります。

変数を短期保存する場合は、変数をセッションに格納することができます。無期限に保存する場合は、データベースまたはファイルに保存する必要があります。

関連する問題