【问题标题】:include php file only once in project在项目中仅包含一次 php 文件
【发布时间】:2019-11-07 16:43:18
【问题描述】:

我有一个文件 (config.php),其中包含我的应用配置数据:

<?php

return [
    // here is my associative configuration array
    // having also Closures in it
];

我所做的是将这个文件发送到我的 Config 类,它将操作我的数据,它将成为我的配置信息接口。

Config::init(require('config.php'));

那样的话,我不想以任何其他方式访问配置信息,而不是使用公共 Config 类方法。

所以,我只需要在我的项目中包含一次 config.php(发送到 Config 类时)。

解决方案是在文件顶部定义一个常量:

<?php

define('config', true);

return [
    // here is my associative configuration array
    // having also Closures in it
];

这样,包含两次config.php会产生错误,因为'config'常量被定义了两次,这在php中是非法的。

但是,'config' 常量可以在第二个包含之前轻松删除。与:

runkit_constant_remove('config');

这就是为什么我需要向您寻求更安全/可靠的解决方案,它可以保证配置信息只能从 Config 类中获取。

【问题讨论】:

  • 尝试 require_once
  • 但是,'config' 常量可以在第二个包含之前轻松删除 什么?怎么样?
  • 是的。可以随时使用 runkit_constant_remove() 删除。
  • runkit_constant_remove 是 PECL 的东西,它不是原生的 3v4l.org/RO3iV
  • 你说define()以后不能去掉?

标签: php file


【解决方案1】:

我建议使用 ini 文件。下面的简单例子:

config.ini

[app]
user = myuser
pass = 123123
stage = 1

你的配置初始化:

Config::init(parse_ini_file('app.ini'));

parse_ini_file 文档点击here

【讨论】:

  • 这个 parse_ini_file() 也可以在以后在应用中再次使用。
  • @ValentinTanasescu 如果这是一个问题,那么您无法保证任何事情。你真正关心的是什么?你有不值得信任的程序员忽略配置值吗?
  • 是的。这是我的担心。
  • 那么,你不能保证什么。如果他们可以在同一个命名空间中编写源代码,他们就可以为所欲为。例如,他们可以简单地避免使用您的 Config 类并硬编码他们想要的任何值。如果你想隔离它们,你需要构建一个 API。
  • 如何创建 API。什么意思?
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2012-06-28
相关资源
最近更新 更多