HP的文件引用涉及到四个函数:

文件引用

1.include()
2.include_once()
3.require()
4.require_once()

这四个函数常常会给PHP初学者造成困扰,总的来说困扰有这么几个:
1.四个函数的区别
2.这四个函数的适用环境
3.使用以上函数后造成的路径问题

下面我们就这三个典型的问题进行分析。
一、区别:
1.include_once()与require_once()在引入文件时,会检测该文件是否在之前已经被引入过,如果已经被引入过则直接返回TRUE。如果没有被引入过,则引入文件。而其他两个函数不会对文件是否被重复引入做出检测。

注意:在PHP 4中的 Windows 系统下是不区分大小写的。也就是说下面的代码都是引入的a.php。当然,PHP 5不会再出现这样的情况了。
include_once "a.php";
include_once "A.php";

2.include()与inclue_once()在引入文件失败时,只会产生警告信息,但是不会终止程序继续向下执行。
Warning:require(wrongFile.php)[function.require]:
failed to open stream:No such file or directory in C:homewebsite est.php on line 5
而其他两个函数在文件引入失败时,会产生致命错误,并终止整个程序的运行。
Fatal error:require()[function.require]:Failed opening required 'wrongFile.php'(include_path='.;C:php5pear')in C:homewebsite est.php on line 5

二、使用环境
1.
由第二条实际上我们已经可以看出他们各自的使用环境了。include()适合用来引入普通文件(例如:视图模板),而require()适合用来引入核
心文件(例如:核心类文件)。因为前者引入的文件相对于整个程序系统来说重要性要低一些,所以就算出错也可以继续执行后面的程序。但是如果说一个系统或者
框架的核心文件都引入失败的话,那么程序还有继续运行下去的必要吗?

2.include_once()与require_once()实际上就是在第三条基础上对引入文件做了更严格的重复性检测而已。同样是前者一般性引入,后者重要引入。

三、路径

于相对路径问题,只要记住一个原则就可以了:加入A引入B,B同时又引入了C。那么,B中引入C的相对路径应该以A--C的相对路径来写。因为,PHP的
文件引入实际上就相当于将B的代码复制到A中,也就是说我们从头到尾都在A中执行代码,当然应该以A为参考来引入C了。

四、其他
1.我们还可以用include()来引用远程PHP文件,并且先这个被引用的文件传参,当然这有一定的先决条件。(详见官方手册)
include 'http://www.example.com/file.php?foo=1&bar=2';

2.注意:这几个函数不一定非得要在后面加括号
include('a.php');
include("a.php");
include 'a.php';
include "a.php";
以上的写法都是可以的。当然,如果后面的参数包含变量,你得斟酌一下。
OK,PHP文件引入就分析到这里。更多精彩内容敬请关注重庆PHP社区!

作者:Angrybird
来源: 重庆PHP http://www.php-chongqing.com

原文地址: http://www.php-chongqing.com/index.php/article/15

重庆PHP原创,转载请保留版权信息PHP之PHP文件引用详解

PHP之PHP文件引用详解的更多相关文章

  1. 史上最全的maven pom.xml文件教程详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. 【Linux学习】Linux下用户组、文件权限详解

    原文地址:http://www.cnblogs.com/123-/p/4189072.html Linux下用户组.文件权限详解 用户组 在linux中的每个用户必须属于一个组,不能独立于组外.在li ...

  3. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  4. Uploadify 上传文件插件详解

    Uploadify 上传文件插件详解 Uploadify是JQuery的一个上传插件,实现的效果非常不错,带进度显示.不过官方提供的实例时php版本的,本文将详细介绍Uploadify在Aspnet中 ...

  5. C++文件读写详解(ofstream,ifstream,fstream)

    C++文件读写详解(ofstream,ifstream,fstream) 这里主要是讨论fstream的内容: #include <fstream> ofstream //文件写操作 内存 ...

  6. C++引用(&)详解

    C++引用详解 引用的概念 引用:就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: 如下:定义引用ra,它是变量a的引 ...

  7. C++11 左值、右值、右值引用详解

    C++11 左值.右值.右值引用详解 左值.右值 在C++11中所有的值必属于左值.右值两者之一,右值又可以细分为纯右值.将亡值. 在C++11中可以取地址的.有名字的就是左值,反之,不能取地址的.没 ...

  8. 转载 Spring、Spring MVC、MyBatis整合文件配置详解

    Spring.Spring MVC.MyBatis整合文件配置详解   使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. ...

  9. http头文件User-Agent详解【转载】

    原文地址:http://blog.csdn.net/andybbc/article/details/50587359 http头文件User-Agent详解 什么是User-Agent User-Ag ...

随机推荐

  1. springboot中generator相关配置文件

    generator.properties # jdbc jdbc.driverClass = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localho ...

  2. 使用ionic播放轮询广告的方法

    使用ionic中的ion-slide-box实现,下面是完整的代码示例: <!DOCTYPE html> <html ng-app="app"> <h ...

  3. 关于UbuntuMate的两个问题点:SSH问题处理与自启动项配置

    一.SSH连接报错问题 ssh到某台机器时候,存在如下报错: /usr/bin/xauth: timeout in locking authority file /home/sam/.Xauthori ...

  4. 如何使用飞秋FeiQ实现两电脑通信(或传输文件)

    如何使用飞秋FeiQ实现两电脑通信(或传输文件) 1. 在两天电脑上,分别按照飞秋FeiQ 我使用的绿色飞秋2013正式版 2. 使用一根网线,将两电脑的网口连接一起 3. 设置飞秋FeiQ的端口号不 ...

  5. 【PAT】1028. List Sorting (25)

    题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1028 题目描述: Excel can sort records according to an ...

  6. @SuppressWarnings 参数列表信息

  7. mybatis select/insert/update/delete

    这里做了比较清晰的解释: http://mybatis.github.io/mybatis-3/java-api.html SqlSession As mentioned above, the Sql ...

  8. a标签添加点击事件

      a标签添加点击事件 CreateTime--2017年8月8日09:11:34 Author:Marydon 一.基础用法 方式一:(不推荐使用) <a href="javascr ...

  9. 【转帖】如何利用Spring Cloud构建起自我修复型分布式系统

    http://zhidao.baidu.com/link?url=tSKwdn3wr8KUxWMteHmneFtY0KoNZBMK9Xy-RimsdISA4h2neAecgHqggBipz2w6nXr ...

  10. IHttpHandler的那些事

    写在前面 从上家公司离职,在家休息,闲着无聊,觉得还是有必要将IHttpHanlder的内容,做一个总结.发现在写demo的过程中,总觉得有点生疏了,项目中很少使用自定义的类来实现该接口.当然,一般处 ...