-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 的帮助

public static $auth_key_value;

static 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:19:56.990 回答
0

从哪里开始:首先你应该知道如何声明和使用类。如果要使用静态类,则应声明静态方法和属性。例子:

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

然后,你应该设置你的变量:

security::auth_key("set", "foo");

现在你可以使用你的回声了。

这里的问题是我不建议在这种情况下使用静态类。

我的建议是初始化类的一个实例并使用 setter 和 getter:

class security {
    private $authKeyValue;
    public function setAuth($value) {
        $this->authKeyValue = $value;
    }
    public function getAuth() {
        return $this->authKeyValue;
    }
}

并在您的代码中:

$authObject = new security();

$authObject->setAuth("blah blah");

echo $authObject->getAuth();
于 2013-05-30T23:20:49.060 回答
0

Filippos Karapetis答案的补充:进一步解释。

为了“存储”某些东西,您需要“空间”来存储它。在您的原始答案中,您将其存储在$auth_key_value.

现在,第二个主题,范围。在 PHP(以及许多其他语言)中,当您离开作用域时,局部变量会被破坏。范围的最简单示例是函数。

把它放在一起。在您的函数auth_key中,您声明了一个变量$auth_key_value。然后你分配$data给它。当函数返回时,这个变量被“销毁”。然后,当您调用security::auth_key("get");它时,它会重新创建$auth_key_value变量。它在这里的声明没有任何价值,所以你echo什么也不返回。这是它应该做的。

如果您在 Filippos Karapetis 中注意到答案:他private static $auth_key_value;班级级别声明。那是在函数之外。这意味着类中的生命将在类$auth_key_value销毁时被“销毁” ,而不是函数。

您应该查看范围,这对您很有帮助。

于 2013-05-30T23:20:57.277 回答