功能存在时未定义的功能

时间:2012-02-04 12:31:13

标签: php

我有一个看起来像这样的PHP类:

class userAuthentication
{
    public static function Authenticate()
    {
        if (isset($_COOKIE['email']))
        {
            verify($someVar, getPass($_COOKIE['email']);
        }
    }

    public static function getPass($email)
    {
    }

    public static function verify()
    {
    }
}

有时候(我无法准确指出什么时候),我得到一个致命的错误:

Call to undefined function getPass()

在我调用上面代码示例中的函数的行处抛出错误。当函数明确存在时,为什么会发生这种情况。

4 个答案:

答案 0 :(得分:5)

它是类中的静态函数。如果要利用Late Static Binding,请使用self::getPass()static::getPass()。同样适用于verify()

答案 1 :(得分:3)

verify不是全局函数,但仅在类的范围内有效。你想要

self::verify($someVar, getPass($_COOKIE['email']);

答案 2 :(得分:1)

我认为当您尝试运行getPass($_COOKIE...时会发生错误,因为您错误地调用了它。由于该函数是一个类方法,您必须像这样运行它:

$this->getPass(...);

或者如果您静态调用它:

self::getPass(...);

制作代码:

class userAuthentication
{
    public static function Authenticate()
    {
        if (isset($_COOKIE['email']))
        {
            self::verify($someVar, self::getPass($_COOKIE['email']);

            // Or...

            $this->verify($someVar, $this->getPass($_COOKIE['email']);
        }
    }

    public static function getPass($email)
    {
    }

    public static function verify()
    {
    }
}

答案 3 :(得分:1)

你不是把它称为静态函数。

从课堂内使用:

self::getPass($email);

或(对于后期静态绑定):

static::getPass($email);

来自课外:

userAuthentication::getPass($email);

该行应该是:

self::verify($someVar, self::getPass($_COOKIE['email']);