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

时间:2013-05-01 18:58:59

标签: php

这是我的静态函数,用于生成随机字符串:

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

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

3 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

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

  ClassName::generateCode($email);

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

  ClassName::$generate 

答案 2 :(得分:0)

在你的函数中你应该使用self而不是$ this,因为函数被声明为static。

将你的成员$ generate声明为static,否则它将无效。