一、PHP中的文件包含
在PHP中,文件的引入是非常基础的功能。是代码复用和模块化开发的前提。尽管PSR-4规范大幅简化了类加载流程,但开发者还是要熟悉底层引入方法的使用。
二、基本语法和示例
include 和 require 都是PHP中将已有文件引入到当前文件中的语法。用法一致,直接传入需要引入的文件。
1. include示例
本例展示的是phpcs中的引入代码。
//include
$config = include 'PhpCsFixer.php';
return $config->setFinder(PhpCsFixer\Finder::create()
->exclude('vendor')
->in(__DIR__.'\src')
->in(__DIR__.'\tests')
);
2. require示例
本例使用的是Laravel中index.php中引入自动加载和启动文件的代码。
//require
require __DIR__ . '/../vendor/autoload.php';
$app = require_once __DIR__ . '/../bootstrap/app.php';
三、核心区别详解
include 和 require 的区别在于错误处理机制。
当引入的文件不存在时:
include只显示警告信息,后续代码会继续执行。require则会抛出一个致命异常,停止执行代码。
根据名字可以加深记忆,require是“需要”,必须的。include是“包含”,可有可无的。
四、include_once和require_once
如果包含后缀once则表示要引入的文件只需要引入一次,如果引入过则不会再次引入,避免多次引入浪费资源。
五、返回值处理技巧
- 如果被包含的文件包含
return,则返回值为return内容。
//config.php
<?php
return [
'a' => 'b'
];
//index.php
$config = include 'config.php';
var_dump($config); //输出数组array(1) { ["a"]=> string(1) "b" }
exit;
- 如果被包含文件不包含
return,则直接返回1。
//config.php
<?php
$a = '123234';
//index.php
<?php
$config = include 'config.php';
var_dump($config); //输出 int(1)
exit;
- PHP中的引入是包含即执行。所以在被包含的文件中
echo、exit等都会立即执行。
//config.php
<?php
echo 'debug';
exit;
//index.php
<?php
$config = include 'config.php'; //输出debug,后续不再执行
var_dump($config);
exit;
六、使用场景和最佳实践
- 配置文件、类定义:
require或require_once。引入失败即报错。 - 可选模版、视图文件:
include。可重复引入组件。 - 函数库:
require_once。
七、现代文件引入
在现代PHP开发中,Composer已经成为文件引入的主流方案。通过配置autoload中的files字段,可指定在应用启动前强制加载的文件。如:
"autoload": {
"psr-4": {
"App\\": "app/",
"Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/"
},
"files": [
"bootstrap/helpers.php"
]
},