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

È stato utile?

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>. <

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top