Desde su pregunta original ya ha sido contestada permítanme sugerir otro enfoque que evita las variables globales en conjunto .
Aparentemente tiene una función + un valor predeterminado que establece como una variable global. También puede definir default values for function parameters.
<?php // test.php
function test($flags=4) {
echo '<br/>in test flag="'.$flags.'"';
if ($flags!=0) {
echo ' flag works';
}
}
Sin variable global, pero todavía se puede llamar a prueba de() sin un parámetro y la función utilizará el valor por defecto - que se puede sobrescribir pasando el parámetro.
function something() {
$include_file = 'test.php';
if (file_exists($include_file)) {
require_once ($include_file);
echo "\nwithout parameter: "; test();
echo "\nwith a parameter: "; test(16);
}
}
something();
exit;
impresiones
without parameter: <br/>in test flag="4" flag works
with a parameter: <br/>in test flag="16" flag works
eso no es exactamente el mismo comportamiento, pero que puede ser lo que quería en primer lugar ....
edición: Otro punto podría ser el
if (file_exists($include_file)) {
require_once ($include_file);
construcción que estás utilizando. No tengo una opinión fuerte (o ninguna evidencia fuerte ;-)) en eso, sino que puede ser que desee considerar el uso
$something = include $include_file;
if (false!==$something) { /* error handling here... */ }
lugar. include "devuelve" falso si php no puede incluir el archivo. Todo lo que se requiere para que esto funcione es que el archivo incluido no devuelve FALSO explícitamente. Este podría ser menos caché (por ejemplo, cuando se utiliza algo como APC). Pero de nuevo: no tengo pruebas para esto, solo una corazonada. Al menos le da a su código la posibilidad de manejar un error "con gracia".
Si agrego 'global $ flag;' en función algo, entonces funciona, es decir, no da el error variable indefinido. No entiendo esto. – CodeTweetie
tiene que declarar el alcance de la variable dentro de una función si está tratando de usar una variable global. Su mejor práctica es no usar variables globales de todos modos. – bonez