2013-05-01 73 views
1

这是我的静态函数生成一个随机字符串:

public static function generateCode($salt) 
    { 
     $this->generate = substr(hash('sha512', $salt), 0, 15); 
     return $this->generate; 
    } 

这就是我如何使用它:

  $this->insert->execute(array(
      ":username" => $username, 
      "generated_code" => self::generateCode($email) 
      )); 

我已在申报财产:

protected $generate; 

收到此错误:

Fatal error: Using $this when not in object context in C:\xampp\htdocs\drip\class\users.class.php on line 154 

线:

 $this->generate = substr(hash('sha512', $salt), 0, 15); 

这有什么错呢?为什么它给了我这个错误?

+0

'$ this'在静态函数中不存在。它们只存在于类上下文中,没有对象实例 – knittl 2013-05-01 19:03:37

回答

7

静态方法不属于一个对象的实例,$这涉及到实例...

在这种情况下我不“认为你需要其他的东西,而不是简单地返回哈希的结果(候选lambda表达式也许?)

public static function generateCode($salt) 
{ 
    return substr(hash('sha512', $salt), 0, 15); 
} 
+0

哦,我现在看到...非常感谢。 – user2326532 2013-05-01 19:06:54

+0

静态可以是私人的吗? – user2326532 2013-05-01 19:07:17

+1

@ user2326532当然,为什么不呢? – 2013-05-01 19:07:58

4

A static函数意味着它是绑定到类,而不是每个实例(对象)。像这样调用它:

ClassName::generateCode($email); 

此外,您不能在静态函数中使用对象成员。让你的$generate成员也static,并把它称为:

ClassName::$generate 
+0

它在同一个类中,因此我称它为self ::,我读过如果它在同一个类中,则必须使用self ::但是,它没有解决错误。 – user2326532 2013-05-01 19:03:42

+0

即时成员是静态的,而不是方法。 – 2013-05-01 19:04:51

+1

访问内部类(静态)方法时,可以使用'self ::'或'static ::',这是正确的。 – Orbling 2013-05-01 19:07:01

0

里面的函数,因为函数声明为static,你应该使用的$这种自我。

声明你的成员$ generate为静态,否则不起作用。