【问题标题】:How can I retrieve values from included PHP contants with conflicting names?如何从包含的名称冲突的 PHP 内容中检索值?
【发布时间】:2012-05-11 02:52:30
【问题描述】:

我发现了几个类似的问题,但我有一个细微的差别——即我无法编辑包含的文件。

我有一个目录,其中包含几十个相同 php 应用程序的克隆。我需要读取每个配置文件,这是一个将数据库设置定义为常量的 php 文件,然后连接到该实例的数据库。显然,由于所有配置文件都是针对同一个应用程序的,循环遍历目录并包含所有配置文件会给我 100 条“已定义常量 DB_HOST”的通知。

如果我可以为每个配置文件添加一个 php 命名空间,这将很容易,但我不能修改配置文件,只能读取它们。由于不可能在读取目录内容的循环中构建命名空间,所以我被卡住了。

除了使用 fopen/file_get_contents 读取文件并重新解析内容之外,是否有一些巧妙的方法可以遍历这些配置文件以包含它们的常量值?我觉得我一定是忽略了什么。

谢谢

【问题讨论】:

    标签: php namespaces include constants


    【解决方案1】:

    这显然是一个了不起的设计问题,应该通过改变设计来解决,而不是通过愚蠢的技巧来解决不断出现的问题,让整个混乱局面完好无损。

    【讨论】:

    • 同意,但不幸的是应用程序实例不在我的控制之下,所以我别无选择,只能保留该部分。
    【解决方案2】:

    你没有忽视任何事情。来自manual

    一旦定义了常量,就永远无法更改或取消定义。

    顺便说一句,我希望你能获得一个用于重构该烂摊子的项目获得批准。 :)

    【讨论】:

    • 我希望。不幸的是,应用程序本身的几十个实例不在我的控制之下,我只需要在不接触它的情况下环绕它。 (抱怨)
    【解决方案3】:

    除了对每个文件都使用包含之外,您不能简单地将每个文件作为文本文件打开并使用fread() 将每个文件的内容读入字符串吗?

    这将使您可以使用正则表达式解析出您想要的字段,并且由于您没有将配置文件包含为 PHP,因此您将回避常量问题。

    【讨论】:

    • 我很想看到另一个允许 PHP 解析文件的解决方案,而不是自己做,但这最终是唯一的选择。尽管我在问题中提到不想这样做,但我想这是最接近答案的事情。
    猜你喜欢
    • 2013-07-27
    • 2017-05-21
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2015-02-16
    • 2019-10-20
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多