PHP静态方法与实例方法

时间:2014-06-01 04:16:35

标签: php oop

我在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>.

1 个答案:

答案 0 :(得分:0)

PHP是一种非常灵活的语言。您可以通过多种方式调用静态方法,其中有两种方法已在$object->staticmethod()$object::staticMethod()上方显示。从$this或对象实例调用静态方法是完全合法的。

调用静态/普通方法的另一种方法是使用call_user_func之类的函数。这里存在一个现有的讨论:

Static methods in PHP