require 和 require_once

Require 表示需要该文件,如果找不到该文件,脚本应停止执行。

<?php
require "whatever.php"; //Includes whatever.php
//The rest of the script, will only be finished if the above require succeeds
?>

根据错误设置,将发出警告。
如果警告没有显示在浏览器中,我们通常可以在服务器日志文件中找到它。

同样,Require_once 确保该文件只会在应用程序中包含一次。

确人包含的路径

许多程序员遇到的一个问题是,基本路径很难计算出来。

在 Linux 系统中,基本路径通常是绝对路径。
一种轻松确定路径的方法,而不必为网络服务器目录编写整个路径,是使用 $_SERVER["DOCUMENT_ROOT"],但这可能不适用于所有情况,因为内容可能不一致。

理想情况下,目录应始终以斜杠 (/) 结尾,因为这将向开发人员表明我们正在使用目录路径,并且开发人员可以相信斜杠始终存在。
对于 DOCUMENT_ROOT,斜线可能不存在,这可能会导致问题。

因此,更好的方法是自己定义一个基本路径变量:

define('BASE_PATH', rtrim(preg_replace('#[/\]{1}#', '/', realpath(dirname(__FILE__))), '/') . '/');

然后可以在整个项目中包含文件时使用它:

require BASE_PATH .'lib/db_client_class.php';

以上将对应于 Ubuntu 中的以下路径,运行 Apache HTTP 服务器:

/var/www/website_name/lib/db_client_class.php

这需要完成一次,通常在组合根目录中(通常是 index.php 文件)。

PHP:Include, Require, Include_once 和 Require_once

PHP Includes 在编写简单、可重用和可维护的代码时很有用。

作为一般规则,我们应该尽可能少地重复自己;此规则也称为 Don't Repeat Yoursel (DRY) 规则,为此,includes 只是更好地组织代码和避免代码重复的一种工具。

有多种不同的方法可以在脚本中包含文件。
在 PHP 中,我们有以下内容:Include、include_once、require 和 require_once。
每个都有自己的用例,将在本教程中进行解释。

如有疑问,我们应该始终使用 require_once 或者 require,因为它们将更轻松地调试损坏的路径,而 _once 版本将避免多次包含文件并导致错误——如果 CMS 可能会发生这种情况或者框架多次调用代码。

使用包含时,确定基本路径的最佳方法可能是在组合根目录(即 index.php 文件)中的某处使用以下内容:

define('BASE_PATH', rtrim(preg_replace('#[/\]{1}#', '/', realpath(dirname(__FILE__))), '/') . '/');

另请参阅:在 PHP 中确定文档根目录或者基本路径

这将创建一个名为 BASE_PATH 的常量,我们可以在整个代码中使用它。
当然,在面向对象的上下文中不建议过多依赖常量;相反,我们可能需要考虑通过依赖注入传递基本路径。

Include 和 Include_once

Include 将尝试包含指定的任何文件,无论它是否存在。
如果未找到该文件,脚本将继续运行。

<?php
include "whatever.php"; //Includes whatever.php
?>

include_once 语句将仅包含该文件,如果它之前尚未包含在应用程序中。

<?php
include_once "whatever.php"; //Includes whatever.php
include_once "whatever.php"; //Won't do anything, since the file was already included.
?>

如果未找到文件,则会创建警告。
如果我们为脚本启用了错误报告,我们将只能看到此警告。

Warning: include(settings.php): failed to open stream: No such file or directory in path on line 50 Warning: include(): Failed opening 'settings.php' for inclusion (include_path='.;path') in path on line 50

警告:include(settings.php):无法打开流:第50行的路径中没有这样的文件或者目录警告:include():无法打开“settings.php”进行包含(include_path='。;第50行路径中的路径'
日期:2020-06-02 22:15:42 来源:oir作者:oir