首页 PHP 正文
181

include/require(_once)函数理一下

  • yiqingpeng
  • 2019-04-09
  • 0
  •  
include和require差不多,仅有一点不同:当包含的文件不存在时,include发出的是警告,而require是错误。
include包含文件时,对于文件的路径有三种情况:
1、被包含文件的路径是绝对路径时(以根路径开头),没什么异议,直接定位文件,此方式效率最高。
2、被包含文件的路径是相对路径时(以./开头),将以入口文件所在的目录为基目录进行文件查找。
3、被包含文件的路径不是以上两种,类似include('path/abc.php'), 此时是按include_path配置的路径列表查找,从第一个路径开始,找到就终止。

影响include_path的地方有:
1、php.ini中配置项include_path; 
2、set_include_path()函数,此函数会覆盖php.ini中的配置,一般可以通过以下方式进行追加式补充,而不要进行覆盖:set_include_path(get_include_path() . PATH_SEPARATOR . '/usr/share/pear');
ini_set('include_path',  $path)具有同样的效果。
3、restore_include_path()函数,调用此函数之后,所有之前通过代码配置的include_path都会舍弃,并还原到php.ini配置的值。
ini_restore()函数可以达到同样的效果。

当项目中include多而杂时,可以使用get_included_files() 或 get_required_files() 查看所有包含文件的详细路径。
注意,使用 auto_prepend_file 配置指令所包含的文件不会包含在以上函数返回的数组里。 

被包含的文件中使用了return, 那么return后面的代码,除了函数定义和类定义,其它代码都不会执行。例如:
included.php:
<?php
return;
function foo(){ //will work
}
class Demo{ //will work
}
echo 'Hello'; //wont work
?>

由于include不是函数,被包含的文件中return返回值不能用以下方式进行比较:
if (include('somefile.php') == true)
应该这样:
if ((include('somefile.php')) == true)

正在加载评论...