在php中,我们可以使用类对象调用静态成员函数。例如
class Human
{
public static function Speak()
{
echo "I am a human.";
}
}
$human = new Human();
$human->Speak();
我们期望静态成员函数只能使用类名而不是类实例变量(对象)来调用。但是我在编程时看到的是php允许使用类对象调用静态成员函数。在php中提供此功能是否有任何实际用途或一些重要原因?
此功能也存在于java和c ++中。感谢Oli在你的回复中指出这一点。
答案 0 :(得分:2)
这与其他OO语言相同,例如C ++和Java。为什么您希望解释器阻止这个?
<强>更新强>
我对此的最佳猜测(这只是 猜测)是“为了方便”。从本质上讲,为什么你的班级用户必须关心一个给定的成员函数是否是静态的?在某些情况下,这肯定很重要;在其他人,也许不是。我并不是说这是一个很好的理由,但我能想出来的一切!
答案 1 :(得分:1)
它允许您从方法的特定定义中抽象出来,例如,如果您必须在某个时刻将其转换为静态定义,则不必重写所有方法调用!
答案 2 :(得分: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
我确信它可能有用......也许可以帮助您根据当前手中的对象确定应该调用哪个类的静态方法。