5.4 文件包含函数
在实际开发中,常常需要把程序中的公用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可。这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利。在 PHP 中, 有 require、require_once、include、include- once 四种方法包含一个文件。
我们来对比他们的不同:
函数 | 包含失败 | 特点 |
---|---|---|
Inlcude | 返回一条警告 | 文件继续向下执行。通常用于动态包含 |
Require | 一个致命的错 | 代码就不会继续向下执行。通常包含极为重要的文件,整个代码甭想执行 |
Include_once | 返回一条警告 | 除了原有 include 的功能以外,它还会做 once 检测,如果文件曾经已经被被包含过,不再包含 |
Require_once | 一个致命的错 | 除了原的功能一外,会做一次 once 检测,防止文件反复被包含 |
注意:
1,少用_once 带 once,因为它会消耗更多的资源去做检测的工作。
2,特高级
Include 文件只需要编译一次,因为每次包含 include 都会再执行一次对应的代码,如何减少 include 再次执行时,需要重新解析的过程。
我们来做一几个实验:
1,include 包含函数的功能。
创建一个 functions.php 文件,里面写上两个函数:
<?php
//functions.php 文件
function demo(){
echo 'aaaa';
}
function test(){
echo 'cccdddd';
}
?>
在 functions.php 的同级目录下,我再创建一个 user.php 文件把 functions.php 文件包含进来。这样我的函数就可以专门放在 functions.php 里面,哪儿需要用到这些函数的时候,我就从哪儿包含进来:
<?php
//user.php
include 'functions.php';
//可以直接调用
demo();
test();
?>
我通过过上例我们知道了 include 的功能。接下来我们对比 include 和 require:
代码中,我们先用 include 来包含不存在的 test.php 文件,
<?php
//user.php
include 'functions.php';
include 'test.php';
//可以直接调用
demo();
test();
?>
再用 require 包含 不存在的 test.php 文件:
<?php
//user.php
include 'functions.php';
require 'test.php';
//可以直接调用
demo();
test();
?>
通过上例的对比我们发现:
如果 test.php 文件不存在 include 会发出警告继续执行 demo() 和 test() 函数。
- 而 requre 则直接报错,demo() 和 test() 函数无法继续执行。
我们通过表格知道了:inlcude 和 include_once 的区别在于,检测是否重复包含。如果重复包含了 include_once 不会再包含 对应的文件了,而 include 则不管这些。有没引入过文件,都再引入一次。
同样刚刚的 user.php 我们再实验一下,我们将 functions.php 包含两次,分别使用 include 和 include_once:
<?php
//user.php
//这儿被包含了两次同样的函数定义文件哟
include 'functions.php';
include 'functions.php';
//可以直接调用
demo();
test();
?>
改为 include_once 再试一次:
<?php
//user.php
//这儿被包含了两次同样的函数定义文件哟
include_once 'functions.php';
include_once 'functions.php';
//可以直接调用
demo();
test();
?>
大家分别执行后会发现——include 这次引入 functions.php 两次的时候报了如下错误:
上图中的提示是说,不能重新定义函数 demo()。
我们在函数定义章节讲过,函数不能定义两次,否则会报错。因为我们将 functions.php 包含了两次所以执行了两次,因此报这个错误。
而 include_once 不报错的原因是因为:他检测了 functions.php 曾经包含过,不再进行包含引入了。
而 require 和 require_once 的功能,大家用你最最聪明的小脑袋是不是就能推理出来了呢?require_once 有两个特点:
- 包含 的文件必须存在,否则停止执行
- 会做重复包含检查哟
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论