Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 包括vs扩展以进行数据访问_Php_Include_Extend - Fatal编程技术网

Php 包括vs扩展以进行数据访问

Php 包括vs扩展以进行数据访问,php,include,extend,Php,Include,Extend,这是一个让我恼火的设计问题,因为在内心深处我知道我做错了。这不一定只是一个PHP问题,但我现在正在从事一个PHP项目,所以这就是我的来源。 我只给你一个场景: 我有一个数据访问脚本使用的JSON生成类。基本上,它是一个网站的go-to URL,该网站实例化JSONGen类,然后查看一个静态文件,提取请求的数据,并将其作为JSON对象发送回去。包含原始数据的文件都采用数组格式,以便更容易读取和更新(因此不必筛选原始JSON数据和语法错误等风险)。 我的问题是访问那个文件。 我所做的是将requir

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

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

这使我能够从类中的任何位置访问JSON,这很有趣。 这感觉有点不对劲,但我在任何地方都找不到任何能解决这种特殊方法的东西

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

我应该使用extend并将JSON放入一个类中(我觉得这很愚蠢),还是继续使用include?或者我应该永远不要在这样的类中包含文件,而是将其传递给构造函数或其他访问方法吗?

这个特定的实例是一个小项目,为它设置数据库是没有意义的。我们可以添加到文件中,修改配置,并更新整个站点。。。。所以请不要告诉我切换到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\u响应::$JSON


如果您通常对json对象执行任何操作(检查标志或其他),您可以向json_响应类添加一个静态方法。

那么,如果我正确理解了创建实例中的include结果?或者您创建了一个全局实例?如果您创建了一个全局实例(创建一个实例并在方法等内部对该变量调用global),那么只需将该类转换为静态类。然后它将自动成为全局的。@jonathanKuhn这就是我要去的地方……JSON数据文件基本上只有:$JSON=array()//现在将数据添加到数组中。就是这样。我使用global关键字来访问$JSON对象。你知道为什么我觉得这是一个很老套的方法吗@Orangepill我不敢说“创建了一个实例”,因为它实际上只是创建了$JSON变量——我是否应该以某种方式将它封装在一个类中?Hmmmmmmm…一般来说,我认为在这种情况下最受欢迎的模式是使用“依赖注入”,在构造函数中传递实例(或创建实例),将实例保存到类的属性。这样可以确保该类必须具有要实例化的另一个类的副本。如果您没有实例化$JSON并调用全局$JSON,它将不会有多大用处。如果传入$JSON,构造函数可以检查它是否有效,如果出现问题,则抛出错误。