У меня есть следующий код в 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