【问题标题】:Using underscore (_) as a PHP function name使用下划线 (_) 作为 PHP 函数名
【发布时间】:2023-07-22 00:19:01
【问题描述】:

根据http://php.net/manual/en/functions.user-defined.php,我应该可以使用下划线(_)作为函数名:

函数名称遵循与 PHP 中其他标签相同的规则。一个有效的 函数名以字母或下划线开头,后跟任意 字母、数字或下划线的数量。作为正则表达式, 它可以这样表达:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*。

但是,以下内容会杀死我的程序而不会导致任何错误:

error_reporting(E_ALL);
echo('start');
function _($x){return ($x)?htmlspecialchars($x):'nbsp;';}
echo('end');

我使用的是 PHP 版本 5.3.18。什么不明白?

【问题讨论】:

  • 您是否开启了错误报告?
  • 使用双下划线 __($x)
  • 上面的代码对我有用。 (PHP 版本 5.3.10)
  • 如果你打开了错误报告,你会看到关于重新声明_()的错误
  • @user1032531 试试3v4l.org/l5d2i

标签: php


【解决方案1】:

已经有一个名为_的内置函数;它是gettext 的别名。

您可能会收到Fatal error: Cannot redeclare _(),但根据您对display_errors 的设置,错误可能不会输出到您的屏幕上。您还可以查看log_errors 指令。

【讨论】:

  • 谢谢。从来不知道。没有很好地记录:php.net/manual/en/function.gettext.php。为什么它不抛出某种错误?
  • @user1032531 确实如此:PHP Fatal error: Cannot redeclare _()
  • 您必须关闭错误报告。我得到这个输出:PHP Fatal error: Cannot redeclare _() in foo.php on line 3
【解决方案2】:

正如 cbuckley 所说,已经定义了一个名为 _ 的别名 gettext。如果您启用了 gettext _ 名称。

您最好使用双下划线 (__)。我经常使用它。或者你禁用 gettext。

【讨论】: