Originalmente inviato da
darbula
Da php 8.0 alcuni Notice sono stati elevati in Warnings tra cui anche la variabile non definita.
Inoltre error_reporting in congiunzione con l'operatore di soppressione degli errori non potrà più essere usato (per impostare 0, E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, E_RECOVERABLE_ERROR, E_PARSE)
[...]
Il livello di error_reporting predefinito è ora E_ALL. In precedenza escludeva E_NOTICE e E_DEPRECATED.
Sì, questo lo so... il motivo per cui ho aperto il thread è che non vedo nessun warning laddove mi aspetterei di vederlo.
Provo a spiegarmi meglio. Ho una cartella Prova impostata su php 8.
Dentro c'è un file test.php con una sola istruzione, che ho scritto apposta per fare questa verifica:
Codice PHP:
<?php
echo $variabile_non_istanziata;
?>
Però, Il file scritto in questo modo non mostra nessun errore.
Se invece lo scrivo così:
Codice PHP:
<?php
error_reporting(E_ALL);
echo $variabile_non_istanziata;
?>
Allora ottengo correttamente il warning:
Warning: Undefined variable $variabile_non_istanziata in /membri/sigilonline/Prova/test.php on line 3
Il problema è che avendo usato php 8 mi aspetterei di ottenere il warning comunque (perchè è quello che dice la documentazione di php), invece lo ottengo solo aggiungendo error_reporting(E_ALL).
EDIT
Ok, ho provato a fargli stampare il livello di error_reporting di default, e confermo che non è E_ALL.
Codice PHP:
<?php
function error_level_tostring($intval, $separator = ',')
{
$errorlevels = array(
E_ALL => 'E_ALL',
E_USER_DEPRECATED => 'E_USER_DEPRECATED',
E_DEPRECATED => 'E_DEPRECATED',
E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
E_STRICT => 'E_STRICT',
E_USER_NOTICE => 'E_USER_NOTICE',
E_USER_WARNING => 'E_USER_WARNING',
E_USER_ERROR => 'E_USER_ERROR',
E_COMPILE_WARNING => 'E_COMPILE_WARNING',
E_COMPILE_ERROR => 'E_COMPILE_ERROR',
E_CORE_WARNING => 'E_CORE_WARNING',
E_CORE_ERROR => 'E_CORE_ERROR',
E_NOTICE => 'E_NOTICE',
E_PARSE => 'E_PARSE',
E_WARNING => 'E_WARNING',
E_ERROR => 'E_ERROR');
$result = '';
foreach($errorlevels as $number => $name)
{
if (($intval & $number) == $number)
$result .= ($result != '' ? $separator : '').$name;
}
return $result;
}
echo error_level_tostring(error_reporting(), ',');
?>
Mi viene fuori questo:
E_RECOVERABLE_ERROR,E_COMPILE_ERROR,E_CORE_ERROR,E _PARSE,E_ERROR
Ho provato anche a lanciare la stessa funzione dentro una cartella in php 5.6, 7.1 e 7.3, e viene sempre fuori la stessa stringa... a me sembra una modifica del default da parte di altervista.