PHP中require_once的范围是什么?
简单的问题:PHP中require_once的范围是什么?,php,scope,server-side-includes,require-once,Php,Scope,Server Side Includes,Require Once,简单的问题:require\u once的范围是全球性的吗 例如: <?PHP require_once('baz.php'); // do some stuff foo ($bar); function foo($bar) { require_once('baz.php'); // do different stuff } ?> 调用foo时,它是重新解析baz.php?还是依赖于主php文件中已经需要的文件(对于同一个include文件,连续两次调用
require\u once
的范围是全球性的吗
例如:
<?PHP
require_once('baz.php');
// do some stuff
foo ($bar);
function foo($bar) {
require_once('baz.php');
// do different stuff
}
?>
调用foo时,它是重新解析baz.php?还是依赖于主php文件中已经需要的文件(对于同一个include文件,连续两次调用require_是一种习惯)
我以前看过这个帖子,但它没有完全回答这个问题:
谢谢你的帮助 require_once()
基本上依靠物理文件来确定是否包含它。因此,在中调用require\u once()
与其说是上下文,不如说是之前是否需要该物理文件
在上面的代码中,您的foo()
函数不会重新解析baz.php
,因为它将是前面包含在顶部的同一个文件
但是,根据您是将其包含在
foo()
中,还是将其包含在顶部,您将得到不同的结果,因为当require\u once()
成功时,范围将应用。为了更具体地回答您的问题,您第二次调用该文件上的require\u once
,它不会做任何事情,因为它已经被包括在内了
如果include包含函数等,那么在函数中包含它也会有问题,所以作用域是不相关的。如果只是定义或处理变量,那么如果希望再次包含它,则可以使用
require
而不是require\u一次
,从而重新定义范围中的变量。它没有require_once
的跟踪适用于内部函数。
但是,以下脚本会产生错误:
a、 php
b、 php
因为函数f()至少在PHP7.3中没有预定义为
b.php
,require\u once
具有全局范围。如果不会,则
x.php
和z.php
都会抛出错误,就像y.php
那样:
a、 php
y、 php
<?php
require_once('b.php');
function f() { require_once('b.php'); echo "inside function f;"; }
?>
<?php
f();
?>
<?php function a() { require_once 'b.php'; b(); }
<?php function b() { debug_print_backtrace(); }
<?php
require_once 'a.php';
a();
b();
#0 c() called at [/var/www/b.php:2]
#1 b() called at [/var/www/a.php:3]
#0 c() called at [/var/www/a.php:4]
<?php
require_once 'a.php';
b();
<?php
require_once 'a.php';
require_once 'b.php';
b();
#0 b() called at [/var/www/z.php:4]