数码资讯
强烈声明:不使用(包括/要求)_once
在使用包括或include_once(以下,包含require_once),这个讨论是非常长的,得出的结论是,是使用包括,但不include_once,之前大部分的原因是include_once需要查询加载的文件列表,确认是否存在,然后加载。 的确,这个理由是正确的,但我今天要说的是另一个原因。 我
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在使用包括或include_once(以下,包含require_once),这个讨论是非常长的,得出的结论是,是使用包括,但不include_once,之前大部分的原因是include_once需要查询加载的文件列表,确认是否存在,然后加载。
的确,这个理由是正确的,但我今天要说的是另一个原因。
我们知道,PHP判断一个文件是否被加载,需要获得文件的opened_path,意思就是说,例如:
复制代码代码如下所示:
< PHP
set_include_path( / / /:TMP TMP2 / );
include_once(2。PHP );
>
当PHP include_once 2.php看到,他不知道什么是不能文件的实际路径加载的文件列表以确定是否已经加载,所以在include_once实施,将尝试此文件的真实路径分析第一(为普通文件getcwd函数和文件检查是一样的路径,所以如果相对路径通常是不成功的),如果成功的话,会发现EG(include_files),如果有包含,返回,否则文件打开,从而得到opened_path。本文件为上面的示例中,文件是否存在的 / / 2.php TMP2。
然后,得到的文件的列表,PHP已经加载后发现这opened_path。如果不包含它,那么它将直接编译,不再需要打开文件。
1。尝试解析文件的绝对路径。如果你可以解析成功,检查如(included_files),返回,并没有延续
2。打开文件并获取文件的打开路径(打开路径)
三.要打开路径,如(included_files)查找,是否,如果是有回报的,没有延续
4。编译文件(compile_file)
这在大多数情况下不是问题,但问题是当您使用APC时…
当使用APC,APC劫持compile_file指针编译文件,所以它可以编译结果直接从高速缓存,避免实际文件的打开,避免系统调用。开放。
然而,当你使用include_once代码之前compile_file,PHP已经试图打开的文件,然后进入APC编译文件是这样劫持,会导致额外的开放手术。APC是解决这一问题,对include_once_override介绍,APC的PHP zend_include_or_eval操作程序的条件下,在开放的include_once_override将被统计,以确定文件的绝对路径,然后如果不装,我们重写码包括,一个棘手的解决方案。
但是,不幸的是,正如我所说,APC的include_once_override实施一直不好,会有一些不明确的问题,如:
复制代码代码如下所示:
< PHP
set_include_path(/tmp);
函数A($ =数组()){
include_once(b.php );
}
(a);
(a);
>
然后,我们b.php置于 / / b.php TMP,具体内容如下:
复制代码代码如下所示:
< PHP
B类{ }
>
所以在apc.include_once_override开放的情况下,连续访问将收到以下错误:
致命的错误包括():不能声明类B
除了这些技术因素,我始终认为,我们应该用include_once代替,因为我们完全可以规划自己,只有一个文件被加载一次。我们也可以通过自动加载的方式实现这一点。
如果你使用include_once,你只能证明你没有在你自己的代码的信心。
所以,建议你,不要用include_once再次
的确,这个理由是正确的,但我今天要说的是另一个原因。
我们知道,PHP判断一个文件是否被加载,需要获得文件的opened_path,意思就是说,例如:
复制代码代码如下所示:
< PHP
set_include_path( / / /:TMP TMP2 / );
include_once(2。PHP );
>
当PHP include_once 2.php看到,他不知道什么是不能文件的实际路径加载的文件列表以确定是否已经加载,所以在include_once实施,将尝试此文件的真实路径分析第一(为普通文件getcwd函数和文件检查是一样的路径,所以如果相对路径通常是不成功的),如果成功的话,会发现EG(include_files),如果有包含,返回,否则文件打开,从而得到opened_path。本文件为上面的示例中,文件是否存在的 / / 2.php TMP2。
然后,得到的文件的列表,PHP已经加载后发现这opened_path。如果不包含它,那么它将直接编译,不再需要打开文件。
1。尝试解析文件的绝对路径。如果你可以解析成功,检查如(included_files),返回,并没有延续
2。打开文件并获取文件的打开路径(打开路径)
三.要打开路径,如(included_files)查找,是否,如果是有回报的,没有延续
4。编译文件(compile_file)
这在大多数情况下不是问题,但问题是当您使用APC时…
当使用APC,APC劫持compile_file指针编译文件,所以它可以编译结果直接从高速缓存,避免实际文件的打开,避免系统调用。开放。
然而,当你使用include_once代码之前compile_file,PHP已经试图打开的文件,然后进入APC编译文件是这样劫持,会导致额外的开放手术。APC是解决这一问题,对include_once_override介绍,APC的PHP zend_include_or_eval操作程序的条件下,在开放的include_once_override将被统计,以确定文件的绝对路径,然后如果不装,我们重写码包括,一个棘手的解决方案。
但是,不幸的是,正如我所说,APC的include_once_override实施一直不好,会有一些不明确的问题,如:
复制代码代码如下所示:
< PHP
set_include_path(/tmp);
函数A($ =数组()){
include_once(b.php );
}
(a);
(a);
>
然后,我们b.php置于 / / b.php TMP,具体内容如下:
复制代码代码如下所示:
< PHP
B类{ }
>
所以在apc.include_once_override开放的情况下,连续访问将收到以下错误:
致命的错误包括():不能声明类B
除了这些技术因素,我始终认为,我们应该用include_once代替,因为我们完全可以规划自己,只有一个文件被加载一次。我们也可以通过自动加载的方式实现这一点。
如果你使用include_once,你只能证明你没有在你自己的代码的信心。
所以,建议你,不要用include_once再次
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。