在PHP 5中,在类外使用"$this"是什么意思

  • 本文关键字:quot this 是什么 PHP php
  • 更新时间 :
  • 英文 :


我正在为客户端将应用程序从PHP 5服务器迁移到PHP 7服务器。我遇到了一些荒谬的代码,它在PHP5服务器上运行(从某种意义上说,它不会引发错误或警告(,但在PHP7服务器上崩溃。我试图理解PHP5中$this的语义,这将帮助我破译代码的作用:

if ( !is_object( $this ) )
{
require_once '' . '/model/Model.php';
$me = new Controller( false );
$me->invoke();
}
else
{
require_once 'model/Model.php';
}

冒犯性陈述当然是if ( !is_object( $this ) )$this在类之外是非法的。我的猜测是,该代码试图实例化某种单例,并且当在类之外使用时,只能假设PHP5中$this的语义将$this解析为null-ish。我很难确认这一点。

PHP曾经允许这种使用吗?或者是否有某种配置选项使它能够以这种方式使用?$this以这种方式使用时意味着什么?

不,在全局范围内使用$this不会有任何用处*

实际上是PHP7.1做出了更改,特别是修复了$this变量RFC的不一致行为。在此之前,PHP只是将它与任何其他未定义的变量一样对待。现在您将看到一个致命错误,请参阅https://3v4l.org/b4Wte

我假设这段代码是从一个类方法复制的,看起来它试图从静态和对象上下文中运行。

真正快速的更改是将is_object检查换成isset,后者仍然可以使用$this安全运行。但既然这条线永远是真的,你还不如用代替整个东西

require_once '' . '/model/Model.php';
$me = new Controller( false );
$me->invoke();

*严格地说,在PHP4中,您可以重新定义$this来指向您想要的任何内容,但我猜这可能不适用于这里。

相关内容

最新更新