como se livrar de aviso PHP aqui? [fechadas]
Pergunta
function t1()
{
echo 1;
}
function t2()
{
echo 2;
}
$funcs = array(t1,t2);
$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}
quando eu executar esse arquivo php pequena:
PHP Notice: Uso de t1 constante indefinida - assumido 't1' em D: \ jobirn \ test \ str.php na linha 11
PHP Notice: Uso de t2 constante indefinida - assumido 't2' em D: \ jobirn \ test \ str.php na linha 11
Como posso me livrar desses avisos? 12
Solução
Você receberá um aviso porque PHP não funciona tratar como objetos de primeira classe. Quando você fizer isso
$functions = array(t1, t2);
O motor de PHP vê t1 e t2, e tenta resolvê-lo como uma constante, mas porque ele não pode encontrar uma constante chamada T1 / T2, que "assume" que você queria tipo array ( 't1', 't2 '); Se você fizer um var_dump ($ funções), você pode ver que os itens na matriz são strings.
Quando você tenta chamar uma string como uma função, como
$functions[0]()
PHP irá procurar por uma função com o mesmo nome que a string. Eu não chamaria isso como utilizar uma string como um ponteiro de função, isso é mais como o uso de reflexão. PHP chama de "funções variáveis", veja:
http://hu2.php.net/manual/en /functions.variable-functions.php
Assim, a maneira correta de se livrar dos avisos é:
$functions = array('t1', 't2');
Sobre por que
't1'();
Não é trabalho? Infelizmente não há nenhuma resposta. É do PHP, há um bom número destes irritante como peculiaridades do inferno. É a mesma peculiaridade como:
explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1
Edit:
O acima mencionado conjunto referenciando sintaxe está disponível em PHP5.4, ele é chamado de matriz dereferencing.
Outras dicas
$funcs = array('t1','t2');
intuitiva, mas é assim que funciona
O trabalho todo para esse problema é alterar as configurações do php.ini a partir
error_reporting = E_ALL
para
error_reporting = E_ALL & ~E_NOTICE
Confira a função error_reporting ():
http://us2.php.net/manual/en /function.error-reporting.php
Ele permite que você configure o nível de erros, avisos e avisos são exibidos.
Por exemplo, se você quiser erros e avisos e sem avisos:
error_reporting (E_ERROR | E_WARNING);
Use declarações cordas Se você quer dizer strings:
$funcs = array('t1','t2');
Veja também capítulo sobre funções varaible na manual do PHP.
usar cordas para chamar uma função, você deve usar chaves
'hello'() // wont work
$hello = 'hello'; $hello() // will work
editar parece { ''} () não funciona. eu me lembro que costumava>. <