cómo deshacerse de la notificación de PHP aquí? [cerrado]
Pregunta
function t1()
{
echo 1;
}
function t2()
{
echo 2;
}
$funcs = array(t1,t2);
$length = count($funcs);
for($i=0;$i<$length;$i++)
{
$funcs[$i]();
}
cuando yo haga este pequeño archivo PHP:
Aviso PHP: El uso de t1 constante indefinida - asumió 't1' en D: \ jobirn \ test \ str.php en la línea 11
Aviso PHP: El uso de t2 constante indefinida - asumió 'T2' en D: \ jobirn \ test \ str.php en la línea 11
¿Cómo puedo deshacerme de esos avisos? 12
Solución
Usted recibe un aviso porque PHP no trata a funciones como objetos de primera clase. Al hacer esto
$functions = array(t1, t2);
El motor de PHP ve t1 y t2, y trata de resolverlo como una constante, pero debido a que no puede encontrar una constante t1 / t2 llamado, se "supone" que quería escribir array ( 'T1', 'T2 '); Si lo hace un var_dump (funciones $), se puede ver que los elementos de la matriz son cadenas.
Cuando se intenta llamar a una cadena como una función, como
$functions[0]()
PHP buscará una función con el mismo nombre que la cadena. Yo no lo llamaría esto como el uso de una cadena como un puntero de función, esto es más como el uso de la reflexión. PHP lo llama "Funciones de variables", véase:
http://hu2.php.net/manual/en /functions.variable-functions.php
Por lo tanto, la forma correcta de deshacerse de los avisos es:
$functions = array('t1', 't2');
Sobre ¿por qué
't1'();
no funciona? Desafortunadamente, no hay respuesta. Es PHP, hay un buen número de estos molestos como peculiaridades infierno. Es la misma peculiaridad como:
explode(':', 'one:two:three')[0];
Parse error: syntax error, unexpected '[' in php shell code on line 1
Editar:
La matriz mencionada referencia a la sintaxis está disponible en PHP5.4, se llama matriz de eliminación de referencias.
Otros consejos
$funcs = array('t1','t2');
poco intuitivo, pero eso es como funciona
El trabajo de todo el año a este problema es cambiar la configuración de php.ini a partir
error_reporting = E_ALL
a
error_reporting = E_ALL & ~E_NOTICE
Salida de la función error_reporting ():
http://us2.php.net/manual/en /function.error-reporting.php
Se le permite configurar el nivel de errores, avisos y advertencias se visualizan.
Por ejemplo, si desea que los errores y las advertencias y nadie se da cuenta:
error_reporting (E_ERROR | E_WARNING);
declaraciones de cuerda si se refiere a cadenas:
$funcs = array('t1','t2');
Véase también el capítulo en funciones varaible en el manual de PHP.
para utilizar cadenas para llamar a una función, se debe utilizar llaves
'hello'() // wont work
$hello = 'hello'; $hello() // will work
editar parece { ''} () no funciona. Recuerdo que solía>. <