我正在保存一个值,以便稍后由其他类调用,因为我需要此值并且无法将其保存到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");
这什么都不返回,我做错了什么?
答案 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
存在于类中,并且在类被销毁时将被“销毁”,而不是函数。
您应该查看范围,这对您非常有帮助。