通过重新编译源代码在 PHP :: 中强制区分大小写的函数?

5 php

更新
有没有办法在 PHP 中强制区分大小写的函数名称,即使这意味着重新编译 PHP?

  • 这可以通过某些设置来实现php.ini吗?
  • 是否可以通过使用某种形式的命名空间“hack”来实现这一点?
  • 作为最后的手段:我如何(以及在​​哪里)编辑可以强制全局区分大小写的 PHP C/C++源代码- 并使其作为- 这可以被 apache 配置覆盖的选项可用,并且在运行时与? php.ini.htaccessini_set()

有很多答案可以证实:

  • PHP 函数名和类名不区分大小写
  • PHP 常量和变量名称区分大小写

这个问题是关于控制情况的,因为如果您有以下问题,会很痛苦:

<?
    define('List', ':List:');
    die(List);
?>
Run Code Online (Sandbox Code Playgroud)

解析错误:语法错误,意外的 ')',期待 '('

在上面的例子中,“内在”函数名list干扰了“用户定义”常量,List而不是“好”的方式——因为它会导致解析错误

我知道很多 PHP 开发人员不太关心“区分大小写”,也没有看到这样做的必要;但是,如果您正在构建一个整洁的样板,或者一个具有明确定义的数据类型作为短词的框架(出于比较原因),那么这是一个问题,因为您针对的是大量受众。

任何输入将不胜感激,谢谢。

小智 2

在网上寻找关于如何准确做到这一点的线索似乎是虚幻的;然而,以下内容可能对任何寻找实现相关目标线索的人有用。

要修改和编译 PHP 源代码,请参阅这篇文章:

如何修改php源代码并重新编译?


以下是一些可能有用的提示:

  • 从这里下载 PHP 源代码: http: //php.net/downloads.php
  • 在主“引擎”文件夹中查看在其内容中引用sensitiv&的文件;case_然而,它可能在这里:./Zend/zendAPI.c 需要引用)
  • 记下常量CONST_CS及其值,定义在./Zend/zend_constants.h因为它经常使用
  • 编辑您认为合适的内容,编译更新的代码并将必要的组件复制并粘贴到您的主 PHP runime 文件夹中(在 Linux 中,它很可能位于:/etc/php

为了使您的更改可配置在php.ini

  • 你需要编辑./Zend/zend_ini.c文件
  • 将您的设置添加为其中的函数
  • 确保在必要时定义和引用它,如./Zend/zend_ini_scanner.*文件中所示。

使您的更改可在 Apache 配置中进行配置 &.htaccess



问题具体

上述内容可能有助于重新构建 PHP,但是,可能有更好、更快的解决方案。

建设性批评
与这个问题的性质具体相关,编辑和重新编译源代码可能有点矫枉过正。它不仅完全超出了“PHP 语言”的范围,而且提到这是针对大量受众的,可能会完全违背框架/样板的目的。

更好的方法
对于这些确切的数据类型常量字的大小写敏感如此重要的确切原因尚不清楚;然而,也许重新命名它们,或者定义要使用的函数而不是不断的比较可能是有益的,所以:

  • 而不是这个词:List,怎么样ListDT(对于列表数据类型)
  • 比较的输入可能比短函数要长,例如:isList()

毕竟:在许多情况下,“编码速度”可能比“代码速度”更重要。

这种方法可以避免重新编译 PHP 的需要,并且“目标受众”不需要仅仅因为“框架”需要一些特定的单词而手动获取和安装非常特定的 PHP 版本。

  • 您问题的全部要点是您尝试在代码中使用**保留关键字**。重新编译 php 并继续区分大小写并不是解决方案。记住什么是保留字,使用命名空间/类常量 - 这些就是您需要的工具。TL;DR:您不能以任何形式使用“list”。是的,这很糟糕,但对于一个聪明的人来说,这是一个很小的限制,以至于在永远解决它之前甚至不值得多思考几秒钟。 (4认同)