gpt4 book ai didi

php - 在 PHP 5 的类外使用时 `$this` 是什么意思?

转载 作者:行者123 更新时间:2023-12-01 23:48:25 26 4
gpt4 key购买 nike

我正在为客户端将一个应用程序从 PHP 5 服务器迁移到 PHP 7 服务器。我遇到过一些在 PHP 5 服务器上有效(在某种意义上它不会抛出错误或警告)但在 PHP 7 服务器上崩溃的荒谬代码。我试图理解 PHP 5 中 $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 不会做任何有用的事情*

实际上是 PHP 7.1 进行了更改 - 特别是 Fix inconsistent behavior of $this variable征求意见稿。在此之前,PHP 只是将其视为与任何其他 undefined variable 一样。现在您会看到一个 fatal error ,请参阅 https://3v4l.org/b4Wte

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

真正快速的改变是将 is_object 检查替换为 isset,它仍然可以使用 $this 安全运行。但由于该行将始终为真,您不妨将整个内容替换为

require_once '' . '/model/Model.php';

$me = new Controller( false );
$me->invoke();

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

关于php - 在 PHP 5 的类外使用时 `$this` 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63824098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com