Поскольку include
- это специальная языковая конструкция, а не функция, ей не требуется повторение для списка параметров:
Поскольку include()
- это специальная языковая конструкция, скобки вокруг ее аргумента не нужны. Будьте внимательны при сравнении возвращаемого значения.
На самом деле, он имеет только один параметр, и перенос его в дополнительные скобки ничего не меняет:
1 ≡ (1) ≡ ((1)) ≡ (((1))) ≡…
Итак, ваше утверждение идентично этому (паремтер только что завернут):
require_once (('abc.php') or die("oops"));
Итак, в качестве параметра у нас есть логическое выражение: true или false . И эти значения имеют строковый эквивалент "1"
и ""
соответственно:
var_dump((string) true === "1");
var_dump((string) false === "");
По этой причине Не удалось открыть, требуется сообщение об ошибке '1' .
Но использование круглых скобок в нужном месте делает это так, как вы хотите:
(@include_once 'abc.php') or die("oops");
Здесь 'abc.php'
явно является параметром, и дизъюнкция с die("oops")
выполняется для возвращаемого значения include_once
. Оператор @
просто игнорирует сообщение об ошибке, которое выдает includ_once
, если файл не существует.
PS: print
также является специальной языковой конструкцией и работает аналогично.