Como include
es una construcción del lenguaje especial y no una función, no es necesario un paréntesis para la lista Paremeter:
Because include()
is a special language construct, parentheses are not needed around its argument. Take care when comparing return value.
De hecho, tiene un solo parámetro y envolviéndolo en paréntesis adicional no hace cambiar nada:
1 ≡ (1) ≡ ((1)) ≡ (((1))) ≡ …
Así que su declaración es idéntica a ésta (la paremter se acaba de terminar):
require_once (('abc.php') or die("oops"));
así que tenemos una expresión booleana como parámetro que es bien cierto o falsa. Y que los valores tienen la cadena equivalente de "1"
y ""
respectivamente:
var_dump((string) true === "1");
var_dump((string) false === "");
Esa es la razón por la cual obtener este apertura Error requiere '1' mensaje de error.
Pero el uso de paréntesis en el lugar correcto como esto hace que funcione como usted lo desea:
(@include_once 'abc.php') or die("oops");
Aquí 'abc.php'
es claramente el parámetro y la disyunción con die("oops")
se realiza en el valor de retorno de include_once
. El @
operator es solo para ignorar el mensaje de error includ_once
se lanzará si el archivo no existe.
PS: print
es también una construcción de lenguaje especial y funciona de la misma manera.
brillante respuesta. Es necesario destacar que require_once no es una función. Es un operador unario (o constructo de lenguaje, si lo prefiere), por lo que es echo, nuevo, include, etc. –
¡gracias! Aunque es un poco asqueroso que al agregar 'die()' de una manera aparentemente aceptable, arroja un error que PARECE una falla al encontrar el archivo y/o requerirlo -o bien- un error en el archivo incluido ... cuando realmente es un código incorrecto en 'require() o die()' – aequalsb