gpt4 book ai didi

php - PHP 代码中莫名其妙的类型提示

转载 作者:搜寻专家 更新时间:2023-10-31 21:34:37 25 4
gpt4 key购买 nike

我正在分析一些在我没有完全访问权限的服务器上运行的 PHP 代码。我可以阅读 phpinfo。代码似乎在服务器上运行良好。在我的本地环境中,我无法让代码运行,因为在使用类型提示调用某个方法时出现“可捕获的 fatal error ”。

someMethod(string $str) {
// Do something...
}

错误说明如下:“传递给...的参数 1 必须是 path\of\namespace\string 的实例,给定的字符串...”。

在字符串类中没有 use 关键字,在开发环境的文件夹中我也无法通过 grep 命令找到任何东西。

是否有任何 PHP 模块、扩展可以使这种类型提示起作用?服务器和我的开发环境使用的是 PHP 5.4.25。

实时系统可能提供什么来运行这样的代码?它可能会使用其他一些基于 PHP 的编程语言,例如 Hack?其余代码是非常直接的 PHP!

最佳答案

您提到代码中没有暗示“字符串”类的 use 语句或命名空间声明。代码是否使用自动加载器?

这里有两个可能的问题:

路径 - 实时环境可能设置了另一个路径,和/或正在通过这个“其他路径”(在您的代码之外)加载/搜索文件/类可能正在看)。

错误处理 - 另一个可能的原因是生产环境中是否存在始终返回 true 的错误处理程序。

我遇到了这个确切的问题,其中类型提示在开发中没有得到解决,但直到我们将其上线并且不再注册错误处理程序时我才意识到。

显然无法阻止致命的解析错误,但事实证明,如果错误处理程序返回 true,则可以忽略可捕获的错误。这就是我在您的案例中投入的资金。

此外,非常重要的是要注意,正如一位用户指出的那样,无法对标量进行类型提示。

更简单的说法是“不可能对任何可以用字符串表示的内容进行类型提示。”这是由于 PHP 处理它的更原始变量的方式,它们都可以相互类型转换,因此(因为 1"1"true 都可以是 == 1== '1'== true)解释器实际上不可能,因为它被编写为实际捕获和执行标量类型提示。

回答这个问题:该变量应该是 $str = "something"; 还是 $str = new string();(即,一个字符串或一个对象)?

如果它应该是一个字符串,请删除类型提示,因为 PHP 中没有任何内容允许这种支持(除了 HHVM,但如果您使用它,您会知道这一点)。

既然你说你无权访问代码,我建议通知有权限的人。

关于php - PHP 代码中莫名其妙的类型提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22956369/

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