-2

この値が必要であり、ページの更新が必要であり、何らかの理由で値をグローバルにできないため、Cookie に保存できないため、後で他のクラスによって呼び出される値を保存しています。値を設定しますが、値を返さず、その理由がわかりません。

class security{
static function auth_key($request, $data=false){


    if($request=="set"){
        //this is always set first and works.
        $auth_key_value=$data;  
    }
    if($request=="get"){
       //If i try die("test"); here is does not die, so its like it does not call it.
        return $auth_key_value;
    }       
}

}

そして呼び出し

echo $key = security::auth_key("get");

これは何も返しません。何が間違っていますか?

4

4 に答える 4

2

最初にクラス メンバーを作成する必要があります。

class security{

private static $auth_key_value;

public function auth_key($request, $data=false){
    if($request=="set"){
        self::$auth_key_value=$data;  
    }
    if($request=="get"){
        return self::$auth_key_value;
    }       
}

}

編集:以下のコメントに記載されているように、静的に変更されました

于 2013-05-30T23:07:13.730 に答える
0

Filippos Karapetis Answerへの追加: 詳細説明。

何かを「保存」するには、それを保存するための「スペース」が必要です。元の回答では、に保存してい$auth_key_valueます。

さて、2 つ目のトピック、スコープです。PHP (および他のかなりの数の言語) では、スコープを離れるとローカル変数が破棄されます。スコープの最も単純な例は関数です。

それを一緒に入れて。関数auth_keyでは、変数を宣言します$auth_key_value。次に、それに割り当て$dataます。関数が戻ると、この変数は「破棄」されます。次に、を呼び出すと、変数security::auth_key("get");が再作成されます。$auth_key_valueここでの宣言には値がないため、echo何も返されません。これは、それがすべきことです。

フィリッポス・カラペティスの回答で気づいたら:彼はクラスレベルで宣言private static $auth_key_value;しています. それは関数の外です。つまり、 はクラス内に存在し、関数ではなくクラスが破棄されると「破棄」されます。$auth_key_value

スコープを確認する必要があります。これは非常に役立ちます。

于 2013-05-30T23:20:57.277 に答える