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

第 154 行:

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

这有什么问题?为什么它给我这个错误?

4

3 回答 3

7

静态方法不属于对象的实例,$this 与实例有关...

在这种情况下,我认为除了简单地返回散列结果(可能是 lambda 表达式的候选者?)之外,您不需要任何其他东西

public static function generateCode($salt)
{
    return substr(hash('sha512', $salt), 0, 15);
}
于 2013-05-01T19:03:14.750 回答
4

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

  ClassName::generateCode($email);

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

  ClassName::$generate 
于 2013-05-01T19:02:08.840 回答
0

在你的函数内部,你应该使用 self 而不是 $this 因为函数被声明为静态的。

Declare your member $generate as static, else it would not work.

于 2013-05-01T19:06:54.173 回答