在PHP中:

什么时候应该使用require和include? 什么时候应该使用require_once vs. include_once?


当前回答

1 -如果文件不是,"require"和"require_once"会抛出致命错误 存在并停止脚本执行

2 - "include"和"include_once"抛出警告并执行 仍在继续

3 - "require_once"和"include_once",顾名思义, 如果文件已经包含,则将不包含该文件 "require", "require_once", "include"或"include_once"

其他回答

对于可重用的PHP模板,使用“include”。使用“require”表示必需的库。

“*_once”很好,因为它检查文件是否已经加载,但它只在“require_once”中对我有意义。

这通常是一个问题,你是想有条件地加载一个客户端库,还是不管你是否要使用它都直接加载它。

这里有一个具体的例子;详述PCJ的发言。

假设你有一个配置文件存储你的数据库用户名和密码(conf.php):

<?php
//my site configuration file

//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>

和一个带有使用数据库的静态函数的类:

<?php
class UsedInLoop {
    public static function databaseQuery(){
        require(/path/to/conf.php);                //require_once will not work here
        $db = new mysqli($location, $dbuser, $userpw, $database);
        //yada yada yada
    }
}
?>

这个静态函数在循环中被迭代调用的另一个函数中使用:

<?php
require_once('path/to/arbitraryObject.php');  //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
    $obj->myFunction();
}
?>

您只能要求/包含该类一次。如果在循环的每次迭代中都需要/包含它,则会得到一个错误。但是,每次调用静态函数时都必须包含conf文件。

<?php
class arbitraryObject {
    public function myFunction(){
        require_once(/path/to/UsedInLoop.php);   //This must be require_once. require() will not work
        UsedInLoop::databaseQuery();
    }
}
?>

当然,将它移到函数之外可以解决这个问题:

<?php
require(/path/to/UsedInLoop.php);   //now require() is fine   
class arbitraryObject {
    public function myFunction(){
        UsedInLoop::databaseQuery();
    }
}
?>

除非您担心加载一个可能只在某些条件下使用的类的开销,并且不想在不使用时加载它。

还有require和include_once。

所以你的问题应该是…

什么时候应该使用require和include? 什么时候应该使用require_once vs. require

这里描述了1的答案。

require()函数与include()函数相同,只是处理错误的方式不同。如果发生错误,include()函数将生成警告,但脚本将继续执行。require()生成一个致命错误,脚本将停止。

2的答案可以在这里找到。

require_once()语句与require()语句相同,只是PHP会检查文件是否已经包含,如果已经包含,则不会再次包含(require)它。

基本上,如果您需要一个错误的路径,PHP会抛出一个致命错误,并调用shutdown函数,但是当您包含一个错误的路径时,PHP将继续执行,但它只会显示一个警告,表明文件不存在。

根据英文单词require, PHP被告知页面或文件的执行取决于所需的文件。

根据我的经验,通常需要重要的文件,如配置文件、数据库类和其他重要的实用程序。

无论何时使用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');  
?>

当你看到m需要test1文件两次,但该文件将包含test1一次,而在第二次调用时,这将被忽略。并且不停止将显示输出一次。

当你在使用'include_once() '时,当你在当前文件中需要调用的文件不止一次时,可以在一个文件中使用'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将一次包含该文件,但会停止进一步执行。