我用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>.
发布于 2014-06-01 12:20:05
PHP是一种非常灵活的语言。有许多方法可以调用静态方法,其中有两个方法已经在$object->staticmethod()或$object::staticMethod()中显示过。从$this或对象实例调用静态方法是完全合法的。
调用静态/普通方法的另一种方法是使用像call_user_func这样的函数。这里有一个现有的讨论:
https://stackoverflow.com/questions/23976710
复制相似问题