php不返​​回函数类值

时间:2013-05-30 23:02:45

标签: php

我正在保存一个值,以便稍后由其他类调用,因为我需要此值并且无法将其保存到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 个答案:

答案 0 :(得分: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;
    }       
}

}

修改:更改为静态,如下面的评论中所述

答案 1 :(得分: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;
    }       
}

感谢所有帮助过的人:)

答案 2 :(得分: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();

答案 3 :(得分: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存在于中,并且在被销毁时将被“销毁”,而不是函数。

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