强烈声明【永利集团304com】

有关选择include还是include_once(以下,都包含require_once卡塔尔,
那一个争辨很短了, 结论也平素有, 正是尽量选择include, 实际不是include_once,
早前最多的理由的是, include_once必要查询贰次已加载的文件列表,
确认是还是不是留存, 然后再加载.

清除这个本领因素, 笔者也平昔认为, 我们应该运用include,
并不是include_once, 因为大家完全能做到和睦安排, 三个文书只被加载叁次.
还足以信任自动加载, 来做到那点.

你使用include_once, 只可以表明, 你对团结的代码没信心.

    1. 尝试深入分析文件的相对路线, 借使能解析成功,
则检查EG(included_files卡塔尔国, 存在则赶回, 不真实继续
    2. 开荒文件, 获得文件的开拓路径(opened path卡塔尔
    3. 拿opened path去EG(included_files卡塔尔查找, 是或不是留存, 借使存在则赶回,
海市蜃楼继续
    4. 编写翻译文件(compile_file)

  1. 品味拆解解析文件的相对路线, 借使能剖析成功, 则检查EG(included_files卡塔尔(قطر‎,
    存在则赶回, 不真实继续
  2. 开荒文件, 拿到文件的开采路线(opened pathState of Qatar
  3. 拿opened path去EG(included_files卡塔尔查找, 是或不是留存, 假若存在则赶回,
    空头支票继续
  4. 编写翻译文件(compile_file)

尽量利用include, 并不是include_once, 理由是
include_once必要查询壹次已加载的文书列表, 确认是还是不是留存, 然后再加载.

其黄金年代在大部分动静下, 不是主题素材, 可是主题材料出在当您接纳APC的时候…

    <?php
      class B {}
    ?>

只是, 很心痛, 如作者所说, APC的include_once_override实现的第一手糟糕,
会有一点未定义的标题, 例如:
复制代码 代码如下:
set_include_path(“/tmp”);
function a($arg = array()) {
    include_once(“b.php”);
}
a();
a();
?>

诚然, 那么些理由是没有错, 但是, 小编前不久要说的, 是其余叁个的原因.

笔者们精晓, PHP去看清叁个文书是还是不是被加载,
是亟需得到这么些文件的opened_path的, 意思是说, 譬如:
复制代码 代码如下:
set_include_path(“/tmp/:/tmp2/”);
include_once(“2.php”);
?>

当PHP看到include_once “2.php”的时候,
他并不知道那个文件的其实路线是何等,
也就不能从已加载的文件列表去判别是或不是已经加载,
所以在include_once的兑现中,
会首先尝试剖析那一个文件的实际路径(对于普通文书那一个深入分析只是临近是检查getcwd和文书路线,
所以即使是相对路线, 日常是不会成功卡塔尔, 借使分析成功,
则查找EG(include_files卡塔尔, 假使存在则注明包罗过了, 重临,
否则open这些文件, 进而得到这么些文件的opened_path. 比如上面的例证,
那么些文件存在于 “/tmp2/2.php”.

那么在开采apc.include_永利集团304com,once_override的场馆下,
一连访谈就能够赢得如下错误:

本条在大部意况下, 不是主题素材, 然则难点出在当您选用APC的时候…

Fatal error – include() : Cannot redeclare class b

大家清楚, PHP去看清八个文件是还是不是被加载,
是亟需得到那么些文件的opened_path的, 意思是说, 举个例子:

接下来, 大家的b.php放置在”/tmp/b.php”, 内容如下:
复制代码 代码如下:
  class B {}
?>

你使用include_once, 只可以证实, 你对自个儿的代码没信心.

当PHP看到include_once “2.php”的时候,
他并不知道这些文件的骨子里路线是哪些,
也就不恐怕从已加载的文书列表去剖断是不是业已加载,
所以在include_once的完成中,
会首先尝试分析那么些文件的真人真事路线(对于不以为奇文书那几个深入分析只是贴近是反省getcwd和文书路线,
所以如果是相对路线, 通常是不会瓜熟蒂落卡塔尔(قطر‎, 假设剖判成功,
则查找EG(include_files卡塔尔国, 假若存在则表明包蕴过了, 再次回到,
不然open这一个文件, 进而获得那么些文件的opened_path. 譬喻下面的例证,
这么些文件存在于 “/tmp2/2.php”.

    <?php
    set_include_path(“/tmp/:/tmp2/”);
    include_once(“2.php”);
    ?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注