Come include
è una speciale costrutto del linguaggio e non una funzione, non ha bisogno paranthesis per la lista paremeter:
Because include()
is a special language construct, parentheses are not needed around its argument. Take care when comparing return value.
Infatti ha un solo parametro e avvolgendolo in parentesi supplementare non lo fa cambia nulla:
1 ≡ (1) ≡ ((1)) ≡ (((1))) ≡ …
Quindi la tua affermazione è identico a questo (il paremter è appena concluso):
require_once (('abc.php') or die("oops"));
Quindi abbiamo un'espressione booleana come parametro che è true o false. E che i valori hanno l'equivalente di stringa di "1"
e ""
rispettivamente:
var_dump((string) true === "1");
var_dump((string) false === "");
Questo è il motivo per cui ottenere questo apertura Impossibile richiesto '1' messaggio di errore.
Ma usando parentesi sul giusto posto come questo lo fa funzionare come si desidera:
(@include_once 'abc.php') or die("oops");
Qui 'abc.php'
è chiaramente il parametro e la disgiunzione con die("oops")
viene eseguita sul valore di ritorno di include_once
. Il @
operator è solo per ignorare il messaggio di errore includ_once
verrà generato se il file non esiste.
PS: print
è anche un costrutto linguaggio speciale e funziona allo stesso modo.
risposta brillante. È necessario sottolineare che require_once non è una funzione. È un operatore unario (o un costrutto linguistico, se preferisci), quindi è eco, nuovo, include, ecc. –
grazie! kinda fa schifo però aggiungendo il 'die()' in un modo apparentemente accettabile, genera un errore che SEMBRA come un errore nel trovare il file e/o richiederlo -oppure- un errore nel file incluso ... quando davvero è male il codice di 'require() o die()' – aequalsb