包括vs扩展数据访问


Include vs Extend for data access

这是一个困扰我的设计问题,因为在内心深处我知道我做错了。这不一定是一个PHP问题,但我现在正在一个PHP项目中工作,所以这就是我的来源。我只给你一个场景:我有一个数据访问脚本使用的JSON生成类。基本上,它是实例化JSONGen类的网站的go-to URL,该类依次查看静态文件并提取请求的数据,并将其作为JSON对象发送回来。包含原始数据的文件全部采用数组格式,以便于阅读和更新(因此不必筛选原始JSON数据并冒语法错误等风险)。我的问题是如何获取那份文件。我所做的是在类定义之外放置一个require([json文件])。[json文件]中的所有内容都分配给一个$ json对象。在类构造函数中:

global $JSON;
$this->JSON = $JSON;

(其中$this->JSON是一个私有类变量)。

这使我可以从类中的任何地方访问JSON,这很可爱。它感觉很粗糙,但我在任何地方都找不到解决这种特定类型方法的任何东西。

问题是,一旦有人决定移动类或其他什么,他们理解这个文件的依赖关系的唯一方法是在头文件中有一个require语句。事情就是这样吗?还是有更好的方法?

我应该使用扩展并将JSON放入类中(这对我来说听起来真的很愚蠢),还是继续我的包含?或者我应该永远不要在类中包含这样的文件,而是将其传递给构造函数或其他访问方法?

这个特定的实例是一个小项目,为它设置DB没有意义。我们可以添加到文件中,修改配置,然后整个站点更新....所以请不要告诉我要切换到数据库-我正在寻找更一般意义上解决这个特定问题的策略。

谢谢!

这个可能会被否决,但是它开始了…

class JSON_Response {
      public static $JSON;
      // don't let people make one of these it gives the illusion that there can be more then one
      protected function __construct(){}
}

然后在你的文件

JSON_Response::$JSON = $json;

,并从任何地方访问它作为JSON_Response::$JSON;

如果有任何你通常对json对象做的事情(检查标志或其他),你可以只添加一个静态方法到JSON_Response类