在PHP中:
require
与include
?require_once
与include_once
?您应该将类和函数定义保存在文件中。
使用require_once()
加载依赖项(类,函数,常量)。
使用require()
加载类似模板的文件。
使用include_once()
加载可选的依赖项(类,函数,常量)。
使用include()
加载可选的类似模板的文件。
使用require文件必须存在,如果没有,则会显示错误;而使用include - 如果文件不存在则则页面将继续加载。
需要关键部件,如授权,包括所有其他部件。
多个包含只是非常糟糕的设计,必须完全避免。所以,* _once并不重要。
include()
会在找不到文件时生成警告,但require_once()
会产生致命错误。
另一件事是如果之前包含文件。然后require_once()
将不再包括它。
来自manual:
require()
与include()
相同,除非失败,它也会产生致命的E_COMPILE_ERROR
级错误。换句话说,它将停止脚本,而include()
只发出警告(E_WARNING
),允许脚本继续。
_once()
变体也是如此。
我使用的功能如下:
function doSomething() {
require_once(xyz.php);
....
}
在xyz.php中声明了常量值。
我必须从另一个PHP脚本文件中调用这个doSomething()函数。
但是我在循环中调用此函数时观察到了行为,因为第一次迭代doSomething()在xyz.php
中获得了常量值,但是后来每次迭代doSomething()
都无法获得在xyz.php
中声明的常量值。
我通过从require_once()
切换到include()
解决了我的问题,更新的doSomething()
代码如下:
function doSomething() {
include(xyz.php);
....
}
现在,每次对doSomething()
的迭代调用都会得到xyz.php
中定义的常量值。
在PSR-0 / PSR-4
自动加载器的时代,如果您只需要为代码提供一些函数/类,则可能完全没有必要使用任何语句(当然,您仍需要在引导文件和require_once
中使用include
自动加载器本身)模板,如果你仍然使用PHP作为模板引擎)。
require
或include
?
require
和include
函数执行相同的任务,即包含和评估指定的文件,但差异是require
将在指定的文件位置无效或任何错误时导致致命错误,而include
将生成警告并继续执行代码。
因此,如果您尝试包含的文件是系统的核心,可能会使用require
函数,并且可能会对代码的其余部分造成巨大影响,并且当您尝试包含的文件时可以使用include
函数是一个包含一些不太重要的代码的简单文件。
我的个人建议(对于不太重要的代码)是在代码中的任何地方使用require
函数,当它处于开发阶段时,您可以调试代码,然后在将require
函数移动到生产之前用include
函数替换所有require_once
函数,如果您错过了任何错误,它将不会影响最终用户,其余代码正确执行...require
或require
?
require_once
和require_once
之间的基本区别是require
将检查文件是否已经包含(如果已经包含),那么它将不包括该文件,而require
函数将包括该文件,而不管文件是否已被包含。
因此,如果您想要一次又一次地包含一些代码,请使用require_once
函数,而如果您只想在代码中包含一些代码,请使用Require 'filename'
Require_once 'filename'
Include 'filename'
。如果你仍然感到困惑,那就一直使用require_once。
使用
function important() { /* important code */}
在您的应用程序中绝对需要,但由于功能无法重新声明,因此不应再次包含。但基本上,由你来决定何时使用哪个。
它们都是包含文件的方式。
需要意味着它需要它。 Require_once意味着它需要它,但只需要它一次。包含意味着它将包含一个文件,但不需要它继续。
例子:
Include_once 'filename'
还有一个include_once函数,它包含一次文件。
if(file_exists($RequiredFile)){
require_once($RequiredFile);
}else{
die('Error: File Does Not Exist');
}
当我从手机打字时,请不要使用大写字母。
有一点我注意到,当使用include时,我只能从包含它的文件中访问包含的文件函数。使用require_once,我可以在第二个required_once文件中运行该函数。
另外:我建议添加
function addFile($file, $type = 'php', $important=false){
//site-content is a directory where I store all the files that I plan to require_once
//the site-content directory has "deny from all" in its .htaccess file to block direct connections
if($type && file_exists('site-content/'.$file.'.'.$type) && !is_dir('site-content/'.$file.'.'.$type)){
//!is_dir checks that the file is not a folder
require_once('site-content/'.$file.'.'.$type);
return 'site-content/'.$file.'.'.$type;
}else if(!$type && file_exists('site-content/'.$file) && !is_dir('site-content/'.$file)){
//if you set "$type=false" you can add the file type (.php, .ect) to the end of the "$file" (useful for requiring files named after changing vars)
require_once('site-content/'.$file);
return 'site-content/'.$file;
}else if($important){
//if you set $important to true, the function will kill the page (which also prevents accidentally echoing the main directory path of the server)
die('Server Error: Files Missing');
return false;
}else{
//the function returns false if the file does not exist, so you can check if your functions were successfully added
return false;
}
}
因为当require_once杀死页面时,它有时会回显您网站文件的目录
这是我要求文件的自定义功能:
$success = addFile('functions/common');
if($success){
commonFunction();
}else{
fallbackFunction();
}
用法示例:
require
基本上,如果你需要一个错误的路径,PHP会抛出致命错误并调用shutdown函数,但是当你包含一个错误的路径时,PHP将继续执行,但它只会显示一个警告,指出该文件不存在。
从英文单词require,PHP被告知页面或文件的执行取决于所需的文件。
根据我的经验,需要重要文件(例如配置文件,数据库类和其他重要实用程序)是常态。
include
比requires
有更大的开销,因为它必须首先解析文件。用includes
替换if (!defined(php)) {
include 'php';
define(php, 1);
}
通常是一种很好的优化技术。
只需使用require和include。
因为想想如何使用include_once或require_once。那就是寻找保存包含或需要的PHP文件的日志数据。所以这比include和require慢。
qazxswpoi
就这样用......
我的建议是在99.9%的时间内使用require_once
。
使用require
或include
代替意味着您的代码不能在其他地方重复使用,即您提取的脚本实际上执行代码而不是提供类或某些函数库。
如果您需要/包括在现场执行的代码,那是程序代码,您需要了解新的范例。像面向对象编程,基于函数的编程或函数编程。
如果您已经在进行面向对象或函数式编程,那么使用include_once
主要是在延迟堆栈中发现错误/错误的位置。你是否想知道当你以后去打电话时,或者你希望通过要求图书馆可以获得它的时刻,do_cool_stuff()
功能不可用?一般来说,最好立即知道您需要和期望的东西是否不可用,所以只需使用require_once
。
或者,在现代OOP中,只需使用autoload您的课程。
_once函数和没有_once函数之间的区别:不再使用_once代码,而使用_once函数,PHP会跟踪包含的文件,并且只包含一次。
require和include之间的区别:如果找不到所需的文件,PHP将发出致命错误,而对于include,只会发出警告。
如果include()
不能包含该文件,它将发出警告,但脚本的其余部分将运行。
require()
将抛出E_COMPILE_ERROR
并停止脚本,如果它不能包含该文件。
include_once()
和require_once()
函数如果已经包含,则不会再次包含该文件。
请参阅以下文档页面:
无论何时使用require_once()
,都可以在文件中使用当您在当前文件中只需要一次调用被调用文件时包含另一个文件。在这个示例中,我有一个test1.php。
<?php
echo "today is:".date("Y-m-d");
?>
在另一个名为test2.php的文件中
<?php
require_once('test1.php');
require_once('test1.php');
?>
因为你正在观看需要test1文件两次的m,但文件将包含test1一次,而在第二次调用时,这将被忽略。没有停止会一次显示输出。
无论何时使用'include_once(),当您在当前文件中多次需要被调用文件时,可以在文件中使用`来包含另一个文件。在这个示例中,我有一个名为test3.php的文件。
<?php
echo "today is:".date("Y-m-d");
?>
在另一个我命名为test4.php的文件中
<?php
include_once('test3.php');
include_once('test3.php');
?>
当你正在观看包含test3文件的m将包含文件一次但停止进一步执行。
使用“include”表示可重复使用的PHP模板。对所需的库使用“require”。
“* _once”很好,因为它检查文件是否已经加载,但它只对我有用“require_once”。
不同之处在于命令生成的错误。使用require
,您想要使用的文件确实是必需的,因此如果找不到它会生成E_ERROR
。
require()
与include()
相同,除非失败,它也会产生致命的E_ERROR
级错误。
include
只有在失败时才会产生E_WARNING
错误,这个错误或多或少是无声的。
因此,如果需要该文件使剩余代码工作并且您希望脚本失败,则使用它,该文件不可用。
对于*_once()
:
include_once()
可用于在特定执行脚本期间可能包含和评估多个文件的情况,因此在这种情况下,它可以帮助避免诸如函数重定义,变量值重新分配等问题。
同样适用于require_once()
当然。
这个问题是七年前提出的,没有一个答案为这个问题提供实际帮助。在现代PHP编程中,您主要使用required_once
只包含一次自动加载器类(通常是编写器自动加载器),它将加载所有类和函数(函数文件需要显式添加到composer.json
文件以便在所有其他文件中可用) )。如果由于任何原因您的类无法从自动加载器加载,您可以使用require_once
加载它。
这些天你只使用require
来分割一大块PHP文件。这主要是一个大数组定义。在这种情况下,你只使用require
而不是require_once
。
<?php
// arr.php
return ['x'=>'y'];
<?php
//main.php
$arr= require 'arry.php'
如果您打算使用的文件包含可执行文件或声明某些变量,您几乎所有时间都需要使用require
,因为如果您在其他地方使用require_once
,您的代码将无法执行和/或您的变量将无法以静默方式启动,从而导致错误这是绝对难以确定的。
include
和include_once
确实没有实际用例。