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 はインスタンスに関連しています...

この例では、単にハッシュの結果を返す以外に何も必要ないと思います (おそらくラムダ式の候補ですか?)

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

関数は static と宣言されているため、関数内では $this の代わりに self を使用する必要があります。

メンバー $generate を static として宣言します。そうしないと機能しません。

于 2013-05-01T19:06:54.173 に答える