PHP 8.4.0 RC4 available for testing

require

(PHP 4, PHP 5, PHP 7, PHP 8)

Выражение require работает идентично выражению include, за исключением того, что выражение require также выдаёт фатальную ошибку уровня E_COMPILE_ERROR, если возникла ошибка. Другими словами, выражение require остановит выполнение скрипта, тогда как выражение include только выдаёт предупреждение уровня E_WARNING, которое разрешает скрипту продолжить работу.

Документация по выражению include рассказывает, как это работает.

Добавить

Примечания пользователей 3 notes

up
148
chris at chrisstockton dot org
17 years ago
Remember, when using require that it is a statement, not a function. It's not necessary to write:
<?php
require('somefile.php');
?>

The following:
<?php
require 'somefile.php';
?>

Is preferred, it will prevent your peers from giving you a hard time and a trivial conversation about what require really is.
up
31
Marcel Baur
3 years ago
If your included file returns a value, you can get it as a result from require(), i.e.

foo.php:
<?php
return "foo";
?>

$bar = require("foo.php");
echo $bar; // equals to "foo"
up
2
jave dot web at seznam dot cz
9 months ago
Always use __DIR__ to define path relative to your current __FILE__.
(Or another setting that is originally based on __DIR__/__FILE__)

try & catch - don't get confused by the words "fatal E_COMPILE_ERROR" - it's still just an internal Error that implements Throwable - it can be caught:

<?php
try {
require(
__DIR__ . '/something_that_does_not_exist');
} catch (
\Throwable $e) {
echo
"This was caught: " . $e->getMessage();
}
echo
" End of script.";
?>

Note that this will still emit a warning "Failed to open stream: No such file or directory..." ...unless you prefix the require with "@" - which I strongly don't recommend as it would ignore/supress any diagnostic error (unless you have specified set_error_handler()). But even if you'd prefix the require with "@" it would still be caught.
To Top