少用但始终都会碰到 - set_include_path

  • 作者:KK

  • 发表日期:2016.12.26


要点速读

平时执行set_include_path时千万不要这样用:set_include_path('/path/to/your-folder'),看上去这只是将你的一个目录设定为include_path,但这里会覆盖掉以前的include paths


正文

平时include/require文件的时候,PHP先会在当前目录下找找有没有这个路径,如果没有,然后就会在include paths里面找

所谓的include paths不是一个目录,而是很多个目录,这些目录可以通过get_include_path();得到(希望可以回顾一下相关文章

这里要说的是,平时执行set_include_path时千万不要这样用:set_include_path('/path/to/your-folder'),看上去这只是将你的一个目录设定为include_path,但这里会直接覆盖掉以前的所有include paths,并不是追加

为了防止覆盖,应该先把旧的给GET出来:

$oldIncludePaths = get_include_path();
$newIncludePaths = $oldIncludePaths . PATH_SEPARATOR . '/path/to/your-folder';
set_include_path($newIncludePaths);

后话

这个时代,修改include_path的代码已经是越来越少了,最通常的用途无非就是为了include文件,但在PSR-4加载标准普及的情况世道下已经越来越少

我最近一次使用set_include_path函数是因为改进一个10多年的老系统,它里面满布include('各种config')和require_once('各种class')