Método estático do PHP versus método da instância

Eu tenho o seguinte código em PHP. Testes em Phpunit e Laravel. Por que o método da class é o mesmo que o método da instância? Eu estava esperando chamar $instance->classMethod() retornaria algum erro. Isso também significa que o nome do método da instância não deve ser compartilhado pelos nomes dos methods da class? Ou é ‘método estático’ em php diferente da minha compreensão de um ‘método de class’?

 classMethod(); $result2 = DemoClass::classmethod(); $this->assertNotEquals($result1, $result2); } } 

O resultado:

Failed asserting that 'i'm a class method' is not equal to .

O PHP é uma linguagem muito flexível. Existem várias maneiras de chamar methods estáticos, 2 methods dos quais você exibiu acima $object->staticmethod() ou $object::staticMethod() . É perfeitamente legal chamar methods estáticos de $this ou a instância do object.

Outra maneira de chamar methods estáticos / normais é usar funções como call_user_func . Existe uma discussão existente aqui:

Métodos estáticos em PHP