Question

function t1()
{
  echo 1;
}
function t2()
{ 
  echo 2;
}

$funcs = array(t1,t2);

$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}

quand j'exécute ce petit fichier php:

Indication PHP: Utilisation de t1 constant indéfini - supposé 't1' à D: \ jobirn \ test \ str.php sur la ligne 11

Avis de PHP: Utilisation de t2 constante indéfinie - supposée 't2' dans D: \ jobirn \ test \ str.php en ligne 11

Comment puis-je me débarrasser de ces avis? 12

Était-ce utile?

La solution

Vous obtenez un avis parce que PHP ne traite pas des fonctions comme objets de première classe. Lorsque vous faites cela

$functions = array(t1, t2);

Le moteur PHP voit t1 et t2, et tente de le résoudre comme une constante, mais parce qu'il ne peut pas trouver un t1 / t2 constante appelée, il « suppose » que vous vouliez taper array ( « t1 », « t2 « ); Si vous faites un var_dump (fonctions $), vous pouvez voir que les éléments du tableau sont des chaînes.

Lorsque vous essayez d'appeler une chaîne en fonction, comme

$functions[0]()

PHP recherchera une fonction avec le même nom que la chaîne. Je ne dirais pas cela comme une chaîne en utilisant comme un pointeur de fonction, ce qui est plus comme l'utilisation de la réflexion. PHP appelle "fonctions variables", voir:

http://hu2.php.net/manual/en /functions.variable-functions.php

Alors, la bonne façon de se débarrasser des avis est:

$functions = array('t1', 't2');

A propos de pourquoi est-

't1'();

fonctionne pas? Malheureusement, il n'y a pas de réponse. Il est PHP, il y a un bon nombre de ces ennuyeux comme bizarreries de l'enfer. C'est la même bizarrerie que:

explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1

Edit:
La syntaxe de référencement tableau ci-dessus mentionné est disponible dans PHP5.4, il est appelé tableau déréférencement.

Autres conseils

$funcs = array('t1','t2');

non-intuitif, mais voilà comment cela fonctionne

Le travail autour de ce problème est de changer les paramètres de php.ini

error_reporting = E_ALL 

à

error_reporting = E_ALL & ~E_NOTICE

Consultez la fonction error_reporting ():

http://us2.php.net/manual/en /function.error-reporting.php

Il vous permet de configurer le niveau d'erreurs, les avis et les avertissements sont affichés.

Par exemple, si vous voulez des erreurs et des avertissements et aucun avis:

error_reporting (E_ERROR | E_WARNING);

déclarations de chaîne si vous voulez dire les chaînes:

$funcs = array('t1','t2');

Voir aussi sur les fonctions varaible dans le manuel PHP.

pour utiliser des chaînes pour appeler une fonction, vous devez utiliser des accolades

'hello'() // wont work
$hello = 'hello'; $hello() // will work

il semble modifier { ''} () ne fonctionne pas. Je me souviens qu'elle était>. <

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top