我在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>.
答案 0 :(得分:0)
PHP是一种非常灵活的语言。您可以通过多种方式调用静态方法,其中有两种方法已在$object->staticmethod()
或$object::staticMethod()
上方显示。从$this
或对象实例调用静态方法是完全合法的。
调用静态/普通方法的另一种方法是使用call_user_func
之类的函数。这里存在一个现有的讨论: