Какова область require_once в PHP?
Простой вопрос: Является ли область require_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 (аналогично вызову require_once дважды подряд для того же файла include )?
Я видел этот поток раньше, но он не совсем ответил на вопрос:
Следует require_once "some file.php" ; отображаются в любом месте, но в верхней части файла?
Спасибо за вашу помощь!
Ответы
Ответ 1
require_once()
в основном полагается на физический файл, чтобы определить, включен ли он. Таким образом, это не столько контекст, который вы вызываете require_once()
, но и в том, требуется ли ранее этот физический файл.
В вашем коде выше ваша функция foo()
не будет повторно анализировать baz.php
, так как она будет тем же самым файлом, который ранее был включен вверху.
Однако вы получите разные результаты на основе того, включили ли вы его внутри foo()
или включили его вверху, так как область применения будет применяться, когда require_once()
будет успешной.
Ответ 2
Это не так. require_once
отслеживание применяется к внутренним функциям.
Однако следующие сценарии создают ошибку:
a.php
<?php
require_once('b.php');
function f() { require_once('b.php'); echo "inside function f;"; }
?>
b.php
<?php
f();
?>
поскольку функция f() не определена до b.php
.
Ответ 3
Чтобы более точно ответить на ваш вопрос, во второй раз вы вызываете require_once
в этот файл, он ничего не сделает, потому что он уже включен.
Если у вас есть функции и т.д., в этом случае у вас будут проблемы, включая его внутри функции, поэтому область не имеет значения. Если только переменные определяются или обрабатываются, вы можете просто использовать require
вместо require_once
, если вы хотите, чтобы он был включен снова, тем самым переопределив переменные в вашей области.