【问题标题】:PHP incorrect access to static class memberPHP 对静态类成员的错误访问
【发布时间】:2015-02-14 04:25:03
【问题描述】:

我有一个类,它有一个静态类的 Mock 实例作为成员变量,当我尝试引用静态方法时,我对静态类成员的访问不正确:

class Foo {
    private my_static_class;

    public testmethod() {
        $this->my_static_class = mock_of_static_class;
        $this->my_static_class::static_method(); // Incorrect access to static class member 
    }
}

使用 -> 而不是 :: 似乎也没有解决问题,我最终得到了

Call to a member function static_method() on a non-object

编辑:我使用的框架将模拟实例作为字符串返回

【问题讨论】:

  • 你是如何创建静态类的模拟的?
  • 使用 Box 的 Shmock 框架。我发现 shmock 仅作为字符串返回。
  • 你能发布你是如何创建你的模拟的吗?我不认为事情的发生完全像你期望的那样。如果返回的模拟只是一个字符串,你应该得到解析错误而不是你正在发生的事情。

标签: php static phpunit


【解决方案1】:

如果您仅将模拟类作为字符串获取,请创建它的实例。

$this->my_static_class = new $mock_of_static_class_as_string();

如果只想调用静态方法,请使用call_user_func()

call_user_func(array($mock_of_static_class_as_string, 'static_method'));

【讨论】:

    猜你喜欢
    • 2018-10-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 2015-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多