【问题标题】:PHP static method vs instance methodPHP静态方法与实例方法
【发布时间】:2014-06-01 04:16:35
【问题描述】:

我在 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 &lt;string:i'm a class method&gt;.

【问题讨论】:

标签: php oop


【解决方案1】:

PHP 是一种非常灵活的语言。有很多方法可以调用静态方法,上面有$object-&gt;staticmethod()$object::staticMethod() 显示的两种方法。从$this 或对象实例调用静态方法是完全合法的。

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

Static methods in PHP

【讨论】:

  • 感谢您指出另一个问题。我没能找到它。我想这是鸭类型类方法与实例方法调用混合的一个特性,而不是一个错误?虽然与我之前的 OOP 经验相比有点令人费解。
猜你喜欢
  • 1970-01-01
  • 2012-11-12
  • 2015-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
相关资源
最近更新 更多