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]