我想知道是否更好的做法是包含PHP脚本可以在文件顶部使用的所有文件,或者如果最好只在需要时包含文件。这是一个例子:
require_once("../engine/generalGetter.php");
if($loggedIn) {
$currencyManager = new CurrencyManager();
}
if($loggedIn) {
require_once("../engine/generalGetter.php");
$currencyManager = new CurrencyManager();
}
第一种方法的好处是保持所有包含有条理,而第二种方法的优点是不会将不必要的代码加载到RAM中。我不确定哪种方法最适合用户可以修改的交钥匙脚本。
答案 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