不在对象上下文中使用$ this时,请使用ReflectionFunction-> invoke()

布韦比
class someClass {
    private $success = "success\n";
    function getReflection() {
        return new ReflectionFunction(function() {
            print $this->success;
        });
     }
}
$reflection = (new someClass)->getReflection();
$reflection->invoke();

当我运行它时,我得到一个

Fatal error: Using $this when not in object context in Command line code on line 5

这里发生了什么事?为什么$this未在其中定义...?

由于我在方法内部的闭包中,$this通常应进行定义。是的,我使用的是比PHP 5.4更高的版本。

我该如何解决?

布韦比

ReflectionFunction在未绑定的闭包上运行。这就是为什么在ReflectionFunction::invoke()调用之后,$this在Closure中没有定义的变量,因此会出现致命错误。

但是有一种解决方法。

ReflectionFunction提供了三种必要的方法来通过$this绑定进行调用

  • ReflectionFunctionAbstract::getClosure()
  • ReflectionFunctionAbstract::getClosureThis()
  • ReflectionFunctionAbstract::getClosureScopeClass()

ReflectionFunctionAbstract::getClosure()仍然是未绑定的,但是我们可以通过其绑定Closure::bind()

所有Closure::bind()需要的是Closure,要绑定的期望对象和类范围。

那么解决方案是:

call_user_func(\Closure::bind(
    $reflection->getClosure(),
    $reflection->getClosureThis(),
    $reflection->getClosureScopeClass()->name));

我最初只想将其发布为问题,但是我在发布前就已经找到了解决方案,所以只需添加答案即可。上下文就是这个问题:https : //github.com/rdlowrey/Auryn/pull/72

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

不在对象上下文中使用$ this php

来自分类Dev

不在对象上下文中使用$ this php

来自分类Dev

错误:不在对象上下文中时使用$ this

来自分类Dev

错误:不在对象上下文中时使用“ $ this”

来自分类Dev

当不在对象上下文中时使用$ this吗?

来自分类Dev

当不在对象上下文中时,在同一个类中使用$ this

来自分类Dev

PHP Slim 3 Framework - 在自定义类中使用 MonoLog - 不在对象上下文中时使用 $this

来自分类Dev

未捕获的错误:使用__callStatic时不在对象上下文中时使用$ this

来自分类Dev

尝试使用 Mysqli 插入时,我收到“不在对象上下文中时使用 $this”

来自分类Dev

我无法运行显示错误的代码,例如不在对象上下文中使用$ this?

来自分类Dev

在不在对象上下文中时使用$ this时出错

来自分类Dev

不在对象上下文中时使用$ this-Laravel 4 PHP 5.4.12

来自分类Dev

ATK4:错误:不在对象上下文中时使用$ this

来自分类Dev

Zend Framework 2:致命错误-不在对象上下文中时使用$ this

来自分类Dev

不在对象上下文中时使用$ this-Laravel 4 PHP 5.4.12

来自分类Dev

致命错误:不在对象上下文中时使用$ this ...在第7行

来自分类Dev

Silex / phpunit案例中出现“在不在对象上下文中时使用$ this”

来自分类Dev

造成此原因的原因:不在对象上下文中时使用$ this

来自分类Dev

致命错误:不在对象上下文中时使用$ this

来自分类Dev

当不在对象上下文中时使用$ this吗?的PHP

来自分类Dev

PHP:“致命错误:不在对象上下文中时使用$ this”

来自分类Dev

不在对象上下文中时使用$ this在静态方法中调用简单方法

来自分类Dev

在Codeigniter中不在对象上下文中时使用$ this

来自分类Dev

Codeigniter模型致命错误:不在对象上下文中时使用$ this

来自分类Dev

OOP致命错误:不在对象上下文中时使用$ this

来自分类Dev

PHP OOP-未捕获的错误:不在对象上下文中时使用$ this

来自分类Dev

如果不在对象上下文中而不使用静态方法,则使用$ this

来自分类Dev

不在 PHP 对象上下文中使用 $this 时出错

来自分类Dev

PHP $ this不在对象上下文中时,用于从类外设置公共变量

Related 相关文章

  1. 1

    不在对象上下文中使用$ this php

  2. 2

    不在对象上下文中使用$ this php

  3. 3

    错误:不在对象上下文中时使用$ this

  4. 4

    错误:不在对象上下文中时使用“ $ this”

  5. 5

    当不在对象上下文中时使用$ this吗?

  6. 6

    当不在对象上下文中时,在同一个类中使用$ this

  7. 7

    PHP Slim 3 Framework - 在自定义类中使用 MonoLog - 不在对象上下文中时使用 $this

  8. 8

    未捕获的错误:使用__callStatic时不在对象上下文中时使用$ this

  9. 9

    尝试使用 Mysqli 插入时,我收到“不在对象上下文中时使用 $this”

  10. 10

    我无法运行显示错误的代码,例如不在对象上下文中使用$ this?

  11. 11

    在不在对象上下文中时使用$ this时出错

  12. 12

    不在对象上下文中时使用$ this-Laravel 4 PHP 5.4.12

  13. 13

    ATK4:错误:不在对象上下文中时使用$ this

  14. 14

    Zend Framework 2:致命错误-不在对象上下文中时使用$ this

  15. 15

    不在对象上下文中时使用$ this-Laravel 4 PHP 5.4.12

  16. 16

    致命错误:不在对象上下文中时使用$ this ...在第7行

  17. 17

    Silex / phpunit案例中出现“在不在对象上下文中时使用$ this”

  18. 18

    造成此原因的原因:不在对象上下文中时使用$ this

  19. 19

    致命错误:不在对象上下文中时使用$ this

  20. 20

    当不在对象上下文中时使用$ this吗?的PHP

  21. 21

    PHP:“致命错误:不在对象上下文中时使用$ this”

  22. 22

    不在对象上下文中时使用$ this在静态方法中调用简单方法

  23. 23

    在Codeigniter中不在对象上下文中时使用$ this

  24. 24

    Codeigniter模型致命错误:不在对象上下文中时使用$ this

  25. 25

    OOP致命错误:不在对象上下文中时使用$ this

  26. 26

    PHP OOP-未捕获的错误:不在对象上下文中时使用$ this

  27. 27

    如果不在对象上下文中而不使用静态方法,则使用$ this

  28. 28

    不在 PHP 对象上下文中使用 $this 时出错

  29. 29

    PHP $ this不在对象上下文中时,用于从类外设置公共变量

热门标签

归档