文件是否应仅包含在需要的位置或顶部?

时间:2015-12-18 15:18:42

标签: php

我想知道是否更好的做法是包含PHP脚本可以在文件顶部使用的所有文件,或者如果最好只在需要时包含文件。这是一个例子:

要求标题

require_once("../engine/generalGetter.php");

if($loggedIn) {     
    $currencyManager = new CurrencyManager();
}

需要时

if($loggedIn) {   
    require_once("../engine/generalGetter.php");
    $currencyManager = new CurrencyManager();
}

第一种方法的好处是保持所有包含有条理,而第二种方法的优点是不会将不必要的代码加载到RAM中。我不确定哪种方法最适合用户可以修改的交钥匙脚本。

1 个答案:

答案 0 :(得分:1)

通常,您不希望在代码中散布@sum个语句。这很快就会变成意大利面条代码。而是将所有需求隔离到单个文件中,并在需要各自的类时自动延迟加载所需的文件。

<强>建议:

PHP社区几年前就认识到了这个问题,并成立了一个小组来为此提出标准,以及其他常见问题(该组是PHP-FIG)。第一个提案(PSR-0)是为了解决这个“自动加载”问题。之后又跟着另一个PSR-4进行了跟进。

这种标准化对PHP开发起了很大帮助,如果您选择采用它,让您的生活更轻松。我强烈建议使用像composer这样的现成自动加载器,它可以很好地自动加载符合PSR-0或PSR-4的代码,也可以作为社区PHP代码的包管理器(大多数是packagist)。

配置自动加载器后,您只需拨打using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { DataTable dt_vi = new DataTable(); dt_vi.Columns.Add("wcID", typeof(int)); dt_vi.Columns.Add("cID", typeof(int)); dt_vi.Columns["cID"].AllowDBNull = true; dt_vi.Columns.Add("dftID", typeof(int)); dt_vi.Columns["dftID"].AllowDBNull = true; dt_vi.Columns.Add("status", typeof(int)); dt_vi.Columns["status"].AllowDBNull = true; DataTable dt_w = new DataTable(); dt_w.Columns.Add("iD", typeof(int)); dt_w.Columns.Add("name", typeof(string)); DataTable dt_r = new DataTable(); dt_r.Columns.Add("r_id", typeof(int)); dt_r.Columns["r_id"].AllowDBNull = true; dt_r.Columns.Add("description", typeof(string)); DataTable dt_d = new DataTable(); dt_d.Columns.Add("dft_id", typeof(int)); dt_d.Columns["dft_id"].AllowDBNull = true; dt_d.Columns.Add("dftAID", typeof(string)); dt_d.Columns.Add("dftName", typeof(string)); DataTable dt = new DataTable(); dt.Columns.Add("qID", typeof(int)); dt.Columns.Add("status", typeof(int)); dt.Columns.Add("dfID", typeof(int)); dt.Columns.Add("name", typeof(string)); dt.Columns.Add("description", typeof(string)); dt.Columns.Add("dftAID", typeof(string)); dt.Columns.Add("dftName", typeof(string)); dt_vi.Rows.Add(new object[] { 1, 1, 1, 1 }); dt_vi.Rows.Add(new object[] { 2, 2, 2, 2 }); dt_vi.Rows.Add(new object[] { 3, 3, 3, 3 }); dt_vi.Rows.Add(new object[] { 4, 4, 4, 4 }); dt_vi.Rows.Add(new object[] { 5, 5, 5, 5 }); dt_w.Rows.Add(new object[] { 1, "a" }); dt_w.Rows.Add(new object[] { 2, "b" }); dt_w.Rows.Add(new object[] { 3, "c" }); dt_w.Rows.Add(new object[] { 4, "d" }); dt_w.Rows.Add(new object[] { 5, "e" }); dt_r.Rows.Add(new object[] { 1, "f" }); dt_r.Rows.Add(new object[] { 2, "g" }); dt_r.Rows.Add(new object[] { 3, "h" }); dt_r.Rows.Add(new object[] { 4, "i" }); dt_r.Rows.Add(new object[] { 5, "j" }); dt_d.Rows.Add(new object[] { 1, "k", "k" }); dt_d.Rows.Add(new object[] { 2, "l", "l" }); dt_d.Rows.Add(new object[] { 3, "m", "m" }); dt_d.Rows.Add(new object[] { 4, "n", "n" }); dt_d.Rows.Add(new object[] { 5, "o", "o" }); var row = from r0w1 in dt_vi.AsEnumerable() join r0w2 in dt_w.AsEnumerable() on r0w1.Field<int>("wcID") equals r0w2.Field<int>("iD") join r0w3 in dt_r.AsEnumerable() on r0w1.Field<int?>("cID") equals r0w3.Field<int?>("r_id") join r0w4 in dt_d.AsEnumerable() on r0w1.Field<int?>("dftID") equals r0w4.Field<int?>("dft_id") into ps from r0w4 in ps.DefaultIfEmpty() select r0w1.ItemArray.Concat(r0w2.ItemArray.Concat(r0w3.ItemArray.Concat(r0w4 != null ? r0w4.ItemArray : new object[] { }))).ToArray(); var rowAgain = from r0w1 in dt_vi.AsEnumerable() join r0w2 in dt_w.AsEnumerable() on r0w1.Field<int>("wcID") equals r0w2.Field<int>("iD") join r0w3 in dt_r.AsEnumerable() on r0w1.Field<int?>("cID") equals r0w3.Field<int?>("r_id") join r0w4 in dt_d.AsEnumerable() on r0w1.Field<int?>("dftID") equals r0w4.Field<int?>("dft_id") into ps from r0w4 in ps.DefaultIfEmpty() select new { cID = r0w1.Field<int?>("cID"), status = r0w1.Field<int?>("status"), defectID = r0w1.Field<int?>("dftID"), name = r0w2.Field<string>("name"), description = r0w3.Field<string>("description"), dftAID = r0w4.Field<string>("dftAID"), dftName = r0w4.Field<string>("dftName") }; foreach(var q in rowAgain.AsEnumerable()) { dt.Rows.Add(q.cID, q.status, q.defectID, q.name, q.description, q.dftAID, q.dftName); } } } } ​ 一次,通常位于第一个可执行文件的最顶层:

require