tutto il web [1][2][3], si dice che dal PHP 5.0.0 "assegnando il valore di ritorno di nuovo per riferimento" dà un E_DEPRECATED
o E_STRICT
a seconda della versione di PHP (E_DEPRECATED
non ha esistono fino al 5.3, quindi era E_STRICT
prima).New di riferimento non dando avvertimento
Come tale è la mia comprensione che questo codice dovrebbe dare un avvertimento:
error_reporting(E_ALL | E_STRICT);
class A
{
}
$a =& new A();
Tuttavia, ho provato questo su due server completamente diversi (uno in esecuzione di PHP 5.3 e uno in esecuzione di PHP 5.2) e non sta effettivamente dando un messaggio! Cosa sta succedendo? La mia comprensione è errata o c'è qualcosa di strano in questi due server?
(io anche che sia strano che questo è deprecato, visto che $a = null; $b =& $a; $b = new A();
non fa lo stesso di $a = null; $b =& $a; $b =& new A();
, ma questa è solo una parte della questione, se ho capito male quello che è sconsigliato ...)
Stranamente, ottengo questo errore solo se eseguo il comando su 'phpsh',' PHP Deprecato: l'assegnazione del valore di ritorno di new per riferimento è deprecata in /Library/Python/2.7/site-packages/phpsh/phpsh.php (578): eval() 'd codice on line 1', ma non se lo eseguo direttamente da cli. – Dogbert
@Dogbert: È davvero strano. L'ho solo provato come servito da server Apache esterni, ma quando avrò il tempo cercherò di eseguirlo dalla riga di comando e 'phpsh' me stesso – Jasper
Non mi sorprenderebbe affatto se il problema qui fosse altrove: prova a settare 'E_ALL | E_STRICT' nel php.ini direttamente, non dimenticare di cambiare anche php-cli.ini, se stai eseguendo questo codice sulla riga di comando. Controlla anche se gli errori non sono nascosti facendo un 'ini_set ('display_errors', 1);'. Inoltre, se stai eseguendo questo su una finestra di Windows, ci sono stati [alcuni bug] (https://bugs.php.net/bug.php?id = 46326) con questo in passato –