Метод статического метода PHP против экземпляра

У меня есть следующий код в PHP. Тестирование в Phpunit и Laravel. Почему метод класса такой же, как метод экземпляра? Я ожидал, что вызов $instance->classMethod() вернет некоторую ошибку. Означает ли это также, что имя метода экземпляра не должно быть разделено именами методов класса? Или это «статический метод» в php, отличный от моего понимания «метода класса»?

 <?php class DemoClass{ static function classMethod(){ return "i'm a class method"; } } class ExampleTest extends TestCase { /** * A basic functional test example. * * @return void */ public function testBasicExample() { $instance = new DemoClass; $result1 = $instance->classMethod(); $result2 = DemoClass::classmethod(); $this->assertNotEquals($result1, $result2); } } 

Результат:

Failed asserting that 'i'm a class method' is not equal to <string:i'm a class method>.

PHP – очень гибкий язык. Существует много способов вызвать статические методы, 2 метода которых вы $object->staticmethod() выше $object->staticmethod() или $object::staticMethod() . Совершенно законно вызывать статические методы из $this или экземпляра объекта.

Другим способом вызова статических / нормальных методов является использование таких функций, как call_user_func . Существующая дискуссия существует здесь:

Статические методы в PHP