come sbarazzarsi di preavviso PHP qui? [chiuso]
Domanda
function t1()
{
echo 1;
}
function t2()
{
echo 2;
}
$funcs = array(t1,t2);
$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}
quando eseguo questo file php piccolo:
PHP Avviso: l'uso di indefinito t1 costante - ha assunto 't1' in D: \ jobirn \ test \ str.php sulla linea 11
PHP Avviso: l'uso di indefinito t2 costante - ha assunto 't2' in D: \ jobirn \ test \ str.php sulla linea 11
Come posso liberarmi di quei Annunci? 12
Soluzione
Si ottiene un avviso perché PHP non considera funzioni come oggetti di prima classe. Quando si esegue questa operazione
$functions = array(t1, t2);
Il motore PHP vede t1 e t2, e cerca di risolverlo come una costante, ma perché non riesce a trovare una costante denominata T1 / T2, si "assume" che si voleva tipo array ( 't1', 't2 '); Se fate una var_dump ($ funzioni), si può vedere che gli elementi dell'array sono stringhe.
Quando si tenta di chiamare una stringa come una funzione, come
$functions[0]()
PHP cercherà una funzione con lo stesso nome della stringa. Non direi questo come utilizzando una stringa come un puntatore a funzione, questo è più come l'utilizzo di riflessione. PHP chiama "funzioni variabili", vedi:
http://hu2.php.net/manual/en /functions.variable-functions.php
Quindi, il modo corretto per sbarazzarsi degli avvisi è:
$functions = array('t1', 't2');
A proposito di perché fa
't1'();
non funziona? Purtroppo non c'è una risposta. E 'PHP, ci sono un buon numero di questi fastidioso come capricci inferno. E 'lo stesso capriccio come:
explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1
Modifica:
La matrice sopra citata referenziare sintassi è disponibile in PHP5.4, si chiama matrice dereferencing.
Altri suggerimenti
$funcs = array('t1','t2');
poco intuitivo, ma è così che funziona
L'opera tutto a questo problema è quello di modificare le impostazioni di php.ini da
error_reporting = E_ALL
a
error_reporting = E_ALL & ~E_NOTICE
Controlla la funzione error_reporting ():
http://us2.php.net/manual/en /function.error-reporting.php
E 'consente di configurare il livello di errori, avvisi e avvertimenti vengono visualizzati.
Ad esempio, se si desidera che gli errori e le avvertenze e nessuno se ne accorge:
error_reporting (E_ERROR | E_WARNING);
dichiarazioni stringa se si intende stringhe:
$funcs = array('t1','t2');
Si veda anche la sulle funzioni varaible nel manuale di PHP.
Per usare le stringhe per chiamare una funzione, è necessario utilizzare le parentesi graffe
'hello'() // wont work
$hello = 'hello'; $hello() // will work
modifica sembra { ''} () non funziona. mi ricordo ha usato>. <