当不在对象上下文中使用$this静态函数


Using $this when not in object context static function

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

    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);

这是怎么回事?为什么会出现这个错误?

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

在这种情况下,我认为你不需要任何东西,除了简单地返回哈希的结果(候选的lambda表达式可能?)

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

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

  ClassName::generateCode($email);

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

  ClassName::$generate 

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

声明$generate成员为static,否则它将无法工作。