2

在 php 中,我们可以使用类对象调用静态成员函数。例如

class Human
{
    public static function Speak()
    {
        echo "I am a human.";
    }
}

$human = new Human();
$human->Speak();

我们期望的是静态成员函数只能使用类名而不是类实例变量(对象)来调用。但是我在编程时看到的是 php 也允许使用类对象调用静态成员函数。php 中提供了此功能是否有任何实际用途或某些重要原因?

这个特性也存在于 java 和 c++ 中。感谢 Oli 在您的回复中指出这一点。

4

3 回答 3

2

这与其他 OO 语言(例如 C++ 和 Java)中的相同。您为什么希望口译员阻止这种情况?

更新

我对此的最佳猜测(这只是一个猜测)是“为了方便”。本质上,为什么你的类的用户一定要关心给定的成员函数是否是静态的?在某些情况下,这肯定很重要;在其他人中,也许不是。我不是说这是一个很好的理由,但这是我能想到的!

于 2010-11-13T18:13:07.927 回答
1

它允许您从方法的特定定义中抽象出来,例如,如果您必须在某个时候将其转换为静态定义,则不必重写所有方法调用!

于 2010-11-13T18:48:35.913 回答
0

我不能回答 PHP,(或真的任何事情),但考虑这个假设的 C++:

class base{
public:
    static void speak(){cout<<"base\n";}
};

class sub :public base {
public: 
    static void speak(){cout<<"sub\n"; }
};

int _tmain(int argc, _TCHAR* argv[]){

    base *base1 = new base();
    base1->speak();

    sub *sub1 = new sub();
    sub1->speak();

    base *sub2 = new sub();
    sub2->speak();
    ((sub*)sub2)->speak();
}

输出将是:

base
sub
base
sub

我相信它会很有用......也许可以帮助您根据当前手头的对象确定应该调用哪个类的静态方法。

于 2010-11-13T18:37:03.660 回答