No utiliceis la keyword global. En todo caso utilizar el array $GLOBALS[$miVariable]
Por 3 motivos. El primero es la propia definición de lo que es el alcance global y el conflicto con otros lenguajes. De por si la variable definida en el código fuera de un cuerpo es global por definición PHP incluído que es del que hablo. En cambio al añadir la keyword global la haces "global" para que sea accesible desde otros cuerpos lo cual no tiene ningún sentido lógico., ya era global. Teniendo en cuenta que PHP hoy en día es utilizado conjuntamente/interactuando con otros lenguajes, crea una sintaxis poca intuitiva que puede hacer creer a desarrolladores de otros lenguajes y del propio PHP algo erroneo, que la variable no era global previamente, lo cual no es cierto.
El segundo es la eficiencia en velocidad y uso de memoria. Según tests que he estado viendo, es mucho más lento que su contraparte $GLOBALS[$miVariable].
Los scopes están diseñados para mejorar la seguridad e integridad del código y componentes externos. Si no es estrictamente necesario o conveniente modificar el scope, no debe hacerse. Está bien seguir el concepto de encapsulación aunque no se trabaje con objetos. Hace el código mucho más escalable, mantenible y menos propenso a errores.
Siguiendo los mismos criterios es más adecuado pasar la variable como argumento. O en caso de ser posible integrar la obtención de datos y su posterior destrucción (automática) en la propia función. Es decir:
<?php
function MirarDato()
{
$dato = 'este es el dato';
echo $dato;
/* $dato se destruye. Se puede usar static si se desea conservar trás finalizar la ejecución o retornarlo. Por ejemplo un contador. */
}
MirarDato();
?>
No suele ser lo adecuado, pero es correcto.
<?php
$dato = 'este es el dato';
function Mirar($argumento)
{
echo $argumento;
}
Mirar($dato);
?>
La opción más lógica. Crear una función que sirva para mirar el contenido de su argumento. Se puede añadir manejo de errores.
<?php
$argumentoAPasar = 'este es el dato';
function Mirar($argumento)
{
return $argumento;
}
$dato = Mirar($argumentoAPasar);
echo $dato;
?>
Tiene sentido si se va a trabajar con el dato y modificarlo.