PHP 8.1.1 的 __toString() 方法问题 - 如果在声明类本身之前创建实例,则导致找不到类

2023-11-30

从 PHP 7.3 升级到 8.1.1 后遇到问题 当然还有很多事情要做,但这有点奇怪。 这个例子对我不起作用,出现错误致命错误:

未捕获错误:找不到类“TestC” C:\xampp81\htdocs\helpdesk811\test81\index.php:2 堆栈跟踪: #0 {main} 抛出在 C:\xampp81\htdocs\helpdesk811\test81\index.php 上 2号线

<?php
$a = new TestC;
echo $a->a;
class TestC
{
    public $a = "a_value";
    public $b;
    public function __toString()
    {
        return "string";
    }
}

如果我定义类和稍后创建实例,它可以工作,但我无法找到有关此行为的任何文档。它与静态方法相同(public static function foo(){echo "bar";})。

我尝试了 3v4l.org 沙箱,它适用于版本 >5.0 &&


您可以在定义类之前使用它,但前提是允许早期绑定。如果某些依赖项尚不可用、类使用特征或实现接口,则早期绑定不起作用。从 PHP 8 开始有一个新的Stringable接口和定义该接口的每个类__toString()功能隐含地实现该接口,从而防止早期绑定。

Nikita Popov (nikic) 写了一篇关于PHP 中的早期绑定他在其中提到这种行为确实没有得到很好的记录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 8.1.1 的 __toString() 方法问题 - 如果在声明类本身之前创建实例,则导致找不到类 的相关文章

随机推荐

  • 如何创建cmd文件来运行jar?

    我已经尝试了一切方法来尝试通过双击使我的 jar 文件可执行 但我得出的结论是 要么我需要一些重大帮助 因为我的 java 安装有问题 要么我需要创建一个 cmd 文件来自动正确运行它们 文件中的代码如下所示 java jar myfile
  • 所有由 EnumDesktops 命名的桌面都无法 OpenDesktop,并出现错误 2“找不到文件”

    我枚举了系统上的桌面 我正在使用 SysInternalsDesktops 所以我知道我有额外的 使用 EnumDesktops Nothing AddressOf EnumDesktopsProc Nothing 有了这些声明 Priva
  • MySQL 左连接错误

    我有一些 SQL 曾经适用于较旧的 MySQL 版本 但升级到较新的 MySQL 5 版本后 出现错误 这是 SQL SELECT portfolio projects types FROM projects types LEFT JOIN
  • 获取预览camerax android中框内的所有文本

    i want to analyse all text that is just inside by box that i have in a preview camera But im getting wrong coordinates f
  • 将文件包含在数组中

    我有这个代码 routes array Home gt index php Contact gt contact php Register gt register php 我有这样的 example php 文件 Support gt su
  • Selenium Chromedriver 导致 Chrome 在没有配置插件、书签和其他设置的情况下启动

    我是 Selenium 的新用户 我想用它来启动 Chrome 浏览器 但遇到问题 public static void processor String url String name System setProperty webdriv
  • 安全的视频流

    我正在使用 jwplayer 我希望用户观看视频但不下载它们 我发现生成视频的哈希 URL 是可以做到的 我在创建哈希的服务器上使用lighttpd mod 并使用它创建视频的url timeout 从创建哈希后每 30 分钟过期 当我第二
  • 使用 jquery 删除不带

    我有一个定义列表 我需要删除所有 dt 没有标签的人 dd 在这种特殊情况下 Herramientas Suplementos Repuestos Herramientas 和 Antipincaduras 该列表可能会有很大差异 因为它取
  • 更改 PHP 中的时区

    好吧 快速提问 服务器正在东部时间运行 PHP程序需要使用中央时间进行日期计算 目前 我将这一行放在脚本的最顶部 putenv TZ US Central 这是最好的方法吗 还是有一些我不知道的 PHP 技巧 Cheers 您可以使用dat
  • Xcode 4异常断点过滤

    中断 Objective C 异常确实非常有用 并且是调试问题的最佳方法NSArray等等 然而 在实际编程时 异常也是一个很好用的东西 Xcode 提供了两种中断 Obj C 异常的选择 每当抛出异常时就中断 每当捕获异常时就中断 打破捕
  • 用于类延续的 Xcode 代码片段?

    我有一个用于创建属性的 Xcode 4 6 代码片段 一个用于弱属性 一个用于强属性 Typing propstrong在接口声明 h 文件 中工作得很好 但是当我在课堂延续中执行此操作时 没有向我提供代码片段 interface MyCl
  • 搜索和链接库目录的顺序

    我很难理解搜索目录以链接到库的顺序 我有一个CentOS6系统和3个版本的gcc 4 4 7 4 7 2 4 9 2 系统版本为4 4 7 版本4 7 2和4 9 2为模块 在 etc ld so conf d 有两个文件 gcc 4 7
  • 如何安装适用于 Python 2.7 的 PyQT4?

    我正在尝试在 Python 2 7 9 上安装 PyQT4 我在 Mac OS X 上 所以我尝试通过 Homebrew 和 Macports 安装它 不幸的是它们似乎都不起作用 这是我尝试过的 brew install python qt
  • 如何检查一个数组元素是否完全存在于php中的另一个数组中[重复]

    这个问题在这里已经有答案了 我有两个数组 例如 array1 1 2 3 4 5 6 7 8 9 array2 4 6 9 有没有什么函数可以让我确定array2完全存在于array1 我知道我可以使用in array 循环中的函数 但在我
  • 包含文件中的包含路径失败

    我在 PHP 包含路径方面遇到了一些麻烦 并且不明白 那里出了什么问题 首先 我想向您展示我的文件 目录结构 文件 目录结构 index php foo baz php bar inc php asdf qwerty inc php ind
  • 批处理脚本帮助 - 将 DelayedExpansion Var 的子字符串替换为另一个 DelayedExpansion Var

    基本上我正在尝试做 var1 SomeText var2 但这段代码不起作用 我缺少什么 在执行使用变量进行搜索和 或替换的搜索和替换操作时 扩展顺序至关重要 内部变量必须在外部搜索和替换扩展发生之前扩展 尝试对两者都使用延迟扩展显然是行不
  • 如何在我的本地 Geth 账户中获取一些以太币?

    我已经设置了 Geth 并创建了一些没有余额的帐户 所以我无法进行任何交易 因为它需要花费 Gas 费 如何创建具有一些初始余额的帐户 以便我可以测试我的合同 我使用以下命令创建了帐户 gt personal newAccount 假设您正
  • 确保 for 循环中的可观察对象在执行其他代码之前全部完成

    我有一段代码 如下所示 getPersons subscribe persons gt for const person of persons getAddress person id subscribe address gt person
  • Android 11 - 访问Android/data目录

    除了 root 之外 还有什么方法可以访问 Android 11 上的 SD 卡的 android data 目录吗 我的 非 Play 商店 应用程序需要访问另一个应用程序的公共 Android data com appname 文件夹
  • PHP 8.1.1 的 __toString() 方法问题 - 如果在声明类本身之前创建实例,则导致找不到类

    从 PHP 7 3 升级到 8 1 1 后遇到问题 当然还有很多事情要做 但这有点奇怪 这个例子对我不起作用 出现错误致命错误 未捕获错误 找不到类 TestC C xampp81 htdocs helpdesk811 test81 ind