PHP require_once()

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP require_once()相关的知识,希望对你有一定的参考价值。

问一个低级的问题:
我的网站目录是这样的:
wwwroot目录下有:
--class目录
--test目录

class目录下有:
--class_database.php
--class_product.php

test目录下有:
--test.php

备注:
1.class目录下为类文件,class_database.php是数据库基本操作类,class_product.php是产品类
2.class_product.php产品类肯定需要操作数据库,所以它的第一行就是 require_once("class_database.php");

3.test目录下的test.php是测试文件,测试产品类,所以它的第一行是:require_once("../class/class_product.php")

4.问题就来了:请大家注意,我在test.php文件包含产品类文件(class_product.php)时,包含的路径是../class/class_product.php,而产品类(class_product.php)在包含数据库文件时,路径直接就是class_database.php.
那么这是否就意味着,class_product.php文件在被test.php文件包含之前,就已经运行了?

不知道大家是否能明白我的意思.我是ASP转过来的,asp中的inlucde和require好像是只包含,不运行,也就是说,如果这些代码是用asp来写的话,class_product.php文件的第一行就应该写:require_once("../class/class_database.php"),尽管 数据库类文件 和 产品类文件 在同一目录.

注意:运行完全正确,这是否就意味着,PHP在使用require_once()函数包含一个文件之前,会运行这个文件?
另外请详细说说include,include_once,require,require_once的根本区别.

1、在php中include和require内的内容是否运行,要看你在所包含的文件里面的代码。如果你包含的是函数,那么当然要等到你调用才会运行,如果你包含的是语句,那么相当于是把这段语句加入到当前的位置
2、include和require的区别是,一个会出现应用级别的报警,include文件不存在,不会引起报错(但是有报警),而require会引起报错,你试一下引用不存在的文件就知道了
3、增加once,那么就是说只包含一次,如果该文件已经被包含了,那么就不会再次包含,你可以设计一个包含文件,直接让其echo数据,然后运行看看,比如
<?php
echo $f
?>
这是一个文件
然后你再另外一个页面使用:
<?php
$f=1
include ("xxx.php")
$f=2
include ("xxx.php")
?>
来看
自己动动手
参考技术A require_once("../class/class_product.php")的意思是说test.php包的文件在test.php的上一级目录的class文件夹中,当中的..就是表示上级目录

而class_product.php在包含class_database.php时直接用require_once("class_database.php")就可以,因为他们都在同一目录(class目录)下

如果class_product.php要包含test.php文件时就用require_once("../test/test.php"),因为test.php在class_product.php的上级目录(wwwroot)的test文件夹中

说的有点乱,不止楼主是否看明白
参考技术B 楼主的问题不复杂,你是问,被包含的文件是否一包含进来就运行。多级包含时是否也这样。。

回答是肯定的,在PHP中,被包含进来的文件。等效于当前文件,会按你代码的书写顺序运行。不管多少级。以此类推上来。

问题二。
include 包含文件到当前位置,只在代码出现处包含文件。
include_once 同上,区别是如果文件已经被包含过了。将不会再次包含。
require 包含文件到最开始处。包含多个文件就按书写顺序优先包含。
require_once 同上,区别同 include_once

文件被包含后将会马上运行。
参考技术C PHP引入文件是引入后执行,不是先执行后引入
include和require是引入文件
include_once和require_once是确保引入的文件只被引入一次以避免多次引入导致错误

PHP中require一般用于页头文件的引入
include一般用于网页中间部分内容的引入
参考技术D include包含进来的文件,在包含失败时,此PHP文件可依然往下执行,不是必要的。require包含进来的文件,一量包含失败,PHP文件立即停止执行,是必要的。后面加一个_once,表示只包含一次,防止在文件较多时发生重复包含。

PHP 中的 require 和 require_once 有啥区别?

【中文标题】PHP 中的 require 和 require_once 有啥区别?【英文标题】:What is the difference between require and require_once in PHP?PHP 中的 require 和 require_once 有什么区别? 【发布时间】:2018-10-12 03:20:39 【问题描述】:
require("file.php");
require_once("file.php");

两者都包含所需的文件,如果找不到文件或存在任何其他问题,则会出现致命错误。如果发生错误,两者都会停止执行。

这两个函数有什么区别?

【问题讨论】:

你读过documentation of require_once吗? “这两个函数有什么区别?” -- 它们不是函数而是语言结构(语句)。 Difference between require, include, require_once and include_once?的可能重复 【参考方案1】:

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

【讨论】:

【参考方案2】:

如果文件丢失,包含将使脚本继续运行(带有警告)。

Require 会在丢失时崩溃。

如果您将 include 用于 100% 可选的东西,那么 include 仍然可以工作,而 require 会爆炸。

如果您包含一些您认为是可选的内容,但您的脚本的其他部分使用它,那么您的脚本将在那里爆炸,您可能不知道为什么。

这不是编写程序的好方法。

否则,两者之间没有区别。

编辑

在典型用法中,95% 的情况下,您选择使用 include 还是 require 并不重要。

因此,您应该坚持使用require(或require_once),以便在您丢失所需文件时告诉您。

在被包含文件中包含文件、在被包含文件中、当顶部缺少一个包含时所产生的错误真的很难追查。

有些人更喜欢include,因为他们想使用那个“功能”。 Douglas Crockford 是 JavaScript/Java/C++ 专家,而不是 PHP,但他建议为了您的理智,应该避免看起来像 bug 或与 bug 无法区分的副作用的功能。

请注意,如果您的整个项目完全基于类(或函数式)并且完全模块化,那么除了在应用程序初始化时重置配置对象上的值(包括 admin-override 选项或 dev-debugging 选项)在已经是 required 的对象上。

正如您可能猜到的那样,还有其他方法可以做到这一点。

这些只是建议,但建议来自比我更聪明的人,他们在数十种语言方面拥有数十年的经验。 参考:Difference between "include" and "require" in php

【讨论】:

以上是关于PHP require_once()的主要内容,如果未能解决你的问题,请参考以下文章

require与require_once有啥区别?PHP

PHP require_once()

php中的require_once

错误 500 Require_once

require_once的用法

PHP5,require_once,打开流失败