【发布时间】:2021-06-25 12:12:28
【问题描述】:
在测试我的 php 脚本是否与 php-8 兼容时,我被以下代码卡住了:
function getDir($a, $o = 2) {
$d = Floor($a / $o);
return ($d % 2 === 0);
}
在php-8 之前,这工作正常,但是,在php-8 它抛出:
致命错误:无法重新声明 getDir()
搜索了一会,发现php-8给dir()引入了一个新别名:
/** @param resource $context */
function getdir(string $directory, $context = null): Directory|false {}
问题
- 我能否让我的代码在php-8 上运行而不重命名函数?
- 是否有所有新函数别名的列表?
-
dir()没有提到别名 - PHP 8 Release Announcement 也没有提及别名
-
【问题讨论】:
-
getdir别名似乎很老了(github.com/php/php-src/blob/php-4.4.9/ext/standard/…。我在 php 迁移指南中没有看到任何关于函数重新声明的通知,这可能是 PHP 8 修复的错误 -
@ADyson 好吧,做了什么:3v4l.org/Zgork
-
Can I get my code to work on php-8 without renaming the function...除非你改变它的范围(例如,把它放在一个类中,也许)。 -
我将此提交给PHP bug database。尽管我同意将用户级函数命名为与内置函数相同是自找麻烦,但不应期望对未记录的(据我所知)别名执行相同操作。我认为核心支持的所有函数别名至少应该在文档中列出,即使在“函数别名请不要使用页面”上也是如此。如果测试功能可以将其报告为别名,那将是一个奖励,但我认为引擎此时无法区分。
-
情节变厚了:这不是区分大小写的问题,函数真的不存在:3v4l.org/dCpeh 但它一直在源代码中。这里发生了非常奇怪的事情。
标签: php php-8 php-8 php-8 php-8 php-8 php alias backwards-compatibility php-8