comment se débarrasser de l'avis de PHP ici? [fermé]
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
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>. <