PHP强化之21 - include与require

一、简介

include和require都是引入指定的文件。_once表示只引入一次,即之前已经引入过的不再引入。

引用原理:

被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path 指定的目录寻找。如果在 include_path 下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和 require 不同,后者会发出一个致命错误。

如果定义了路径——不管是绝对路径(在 Windows 下以盘符或者 \ 开头,在 Unix/Linux 下以 / 开头)还是当前目录的相对路径(以 . 或者 .. 开头)——include_path 都会被完全忽略。例如一个文件以 ../ 开头,则解析器会在当前目录的父目录下寻找该文件。

二、区别

1、加载失败的处理方式不同

include在引入不存文件时产生一个警告(E_WARNING级别)且脚本还会继续执行;require则会导致一个致命性错误(E_COMPILE_ERROR级别)且脚本停止执行。

include 'hello.php';
echo 'world'; // 如果hello.php不存在,echo 'world'这句是可以继续执行的。
require 'hello.php';
echo 'world'; //如果hello.php不存在,echo 'hello'这句是不会执行的,到require时就停止了。

2、include()是有条件包含函数,而 require()则是无条件包含函数。

if(FALSE){
include 'file.php'; //file.php不会被引入
}

if(FALSE){
require 'file.php'; //file.php将会被引入
}

3、include有返回值,而require没有

在失败时 include 返回 FALSE 并且发出警告。成功的包含则返回 1,除非在包含文件中另外给出了返回值。

4、文件引用方式

include()执行时需要引用的文件每次都要进行读取和评估;
require()执行时需要引用的文件只处理一次(实际上执行时需要引用的文件内容替换了require()语句)

require通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

include一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

三、注意

1、关于include和require后面是否加括号的问题

理论上来说:include和require后面加不加括号对执行结果没有区别,但是加上括号效率较低,所以后面能不加括号就不加括号。

2、关于_once

require(include) / require_once(include_once)唯一的区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。

参考

1、require:http://php.net/manual/zh/function.require.php
2、include:http://php.net/manual/zh/function.include.php
3、require_once:http://php.net/manual/zh/function.require-once.php
4、include_once:http://php.net/manual/zh/function.include-once.php

你可能感兴趣的:(PHP强化之21 - include与require)