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

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top