Php 范围解析运算符和类方法

Php 范围解析运算符和类方法,php,class,oop,methods,static,Php,Class,Oop,Methods,Static,好吧,我不明白为什么这个代码有效 class MyObject { public function myBaseMethod() { echo 'I\'m declared in' . __CLASS__; } } $instance = new MyObject(); $instance->myBaseMethod(); MyObject::myBaseMethod(); // Output I'm declared inMyObject

好吧,我不明白为什么这个代码有效

class MyObject  {
    public function myBaseMethod()
    {
        echo 'I\'m declared in' . __CLASS__;
    }

}

$instance = new MyObject();
$instance->myBaseMethod();
MyObject::myBaseMethod();

 // Output
I'm declared inMyObject
I'm declared inMyObject
我可以通过创建MyObject类的新实例或作为静态方法来调用myBaseMethod()。但是myBaseMethod并没有声明为静态的

我认为我只能对静态成员/方法使用::


有什么解释吗?是的,这是可能的。我想知道为什么。但是请注意,PHP将抛出一个
E_STRICT
错误,这对于新代码来说绝对是不可接受的,而它可能发生在遗留代码中。您不应该调用未声明为静态的静态方法。尝试修复旧代码。

请参阅刚刚在我的本地主机上运行了代码,但出现错误。所以只要坚持你所知道的。这可能是您的php设置。