La estructura en PHP: Constantes, funciones, variables y su ámbito

En este post terminaré con los conceptos de la estructura.  Hablaré de constantes, constantes predefinidas, funciones y los ámbitos que puede tener una variable y que conlleva.

Constantes

Las constantes son como las variables solo que, con una pequeña diferencia, su valor no se puede modificar una vez su valor es definido.

Un ejemplo de una constante podría ser mantener la localización de un directorio del servidor local. Se definiría de la siguiente forma:

Para leer el contenido de una variable basta con referirse a él como una variable normal sin el $.

Es una buena práctica que los nombres de las constantes sean en mayúsculas.

Constantes predefinidas

Son constantes que trae PHP, aunque seas principiante encontrarás alguna bastante útil. Los nombres de estas constantes siempre tienen 2 barras bajas (_) delante y detrás para evitar su uso accidental.

Constante Función
__LINE__ Muestra el número de línea actual del archivo.
__FILE__ Muestra la ruta completa del archivo, incluyendo el nombre del archivo. En caso de usar un include, devolvería el nombre.
__DIR__ Directorio del archivo. Este a diferencia del anterior no devolvería el nombre del archivo.
__FUNCTION__ Nombre de la función. En PHP5 el nombre es tal cual se escribió. Sin embargo en PHP4 siempre es en minúsculas.
__CLASS__ Nombre de la clase. Sucede lo mismo que en el caso anterior.
__METHOD__ Nombre del método de la clase. Le sucede lo mismo que __CLASS__ y __FUNCTION__ respecto al nombre.
__NAMESPACE__ Nombre del espacio de nombres actual. Esto es un identificador.

Funciones

Son secciones de código separadas que desarrollan una tarea particular. Usar funciones es ideal para optimizar código. Por ejemplo, si ves que en tu código se realizan varias veces la misma acción es conveniente usar una función. Quedaría un código más limpio y más rápido. Además, no tendrías que hacer modificaciones en todo el código, bastaría con modificar la función.

Lo ideal de las funciones es que puede tener mayor funcionalidad ya que pueden pasarse parámetros o argumentos e incluso devolver valores.

Os muestro un ejemplo de declaración de una función

Para usarla en el código bastaría con mostrar_fecha(parámetro). En este caso irá con un echo para imprimir el resultado y como parámetro un string.

Ámbito de las variables

Podemos establecer el rango de acción de una variable. Por ejemplo, una variable puede usarse en una función en particular y olvidarla una vez que la función haya devuelto el valor. También se puede informar a PHP de una variable global que pueda ser usada en cualquier parte de tu programa.

Variables locales

Son aquellas creadas dentro de una función y sólo pueden ser accedidas por estas. Son generalmente variables temporales que son usadas para almacenar resultados y son empleadas por el return de la función.

Un grupo de variables locales es la lista de argumentos o parámetros de una función. En la función anterior teníamos un parámetro llamado $fecha. Dicho parámetro sólo puede usarse dentro del cuerpo de la función, no se podría cambiar ni obtener el valor fuera de la función.

Vamos a crear una función llamado suma que sumará 2 valores que le demos:

En la función se crea una variable llamada $resultado y que está en el return de la función. Tan pronto como la función haga return, el valor de $resultado se borra, como si nunca se hubiese usado.

Ahora vamos a declarar la variable $mensaje que tendrá como valor el mensaje del return de la función. Esta variable la declaramos fuera de la función y la llamaremos dentro de la función. Esto no funcionaría:

La función suma no puede acceder a la variable $mensaje y solo mostraría el resultado de la suma y este error: Notice: Undefined variable: string.

Para solucionarlo podemos concatenar $mensaje con el resultado de la función:

También podemos pasar $mensaje como argumento:

Olvidar el ámbito de una variable es un error bastante común. Así que si tienes el error “notice: undefined variable”, asegúrate que la variable no tenga un rango de acción local y la estas usando correctamente.

Variables globales

Puede haber ocasiones que necesites una variable con un alcance global porque quieres que cualquier parte de tu código pueda acceder a él.

Para declarar una variable global, basta con usar la keyword global.

De esta manera puedes modificar $variable_global en cualquier parte de tu código y dicho cambio se verá afectado en las otras partes donde trate de acceder a su valor.

El uso de variables globales no es recomendable, sólo se usan si no hay ninguna otra forma de alcanzar el resultado deseado. Imagina que tienes un código muy largo y una variable global da un valor incorrecto ¿Cuánto tardarías en encontrar el lugar dónde se usa incorrectamente?

Otro caso del uso excesivo de variables globales sería usar uno de sus nombres otra vez de manera local inconscientemente.

Variables estáticas

Hace un momento comenté que las variables locales tienen un valor que desaparece una vez finaliza la función.

Se puede hacer que la variable local dentro de una función mantenga su valor para la próxima vez que se llame la función. Esto es útil si precisas de un contador en la función. Para esto hay que declarar una variable como static.

Os dejo el siguiente ejemplo:

Se crea la variable estática $cuenta y se inicializa a 0. La próxima línea es un echo que imprime el valor y finaliza sumándole 1 a $cuenta.

La próxima vez que la función contador() es llamada, la primera línea se saltará ya que la variable $cuenta ya fue declarada. Así conserva el valor y se le puede sumar uno otra vez.

Las variables estáticas no pueden tener un resultado derivado de una expresión a la hora de definirlas. Ejemplo

Variables superglobales

Estas variables son predefinidas por PHP y son globales dentro del programa, pudiendo ser accedidas desde cualquier parte.

Estas superglobales contienen mucha información útil sobre el programa que se está ejecutando y su entorno. Están estructurados en arrays asociativos.

Superglobal Descripción
$_GLOBALS Son todas las variables que están definidos en el ámbito global. El nombre de las variables son el índice del array.
$_SERVER Información sobre cabeceras, directorios y localizaciones de scripts. Es creado por el servidor web. Por ejemplo obtener de que RUL proviene un usuario, si usó POST en un formulario, el directorio raíz del servidor, el nombre del servidor…
$_GET Pasa variables por el método HTTP GET.
$_POST Pasa variables por el método HTTP POST.
$_FILES Archivos subidos por el método HTTP POST.
$_COOKIE Contiene variables que son pasadas por HTTP Cookies.
$_SESSION Guarda las variables de sesión del script actual.
$_REQUEST Contiene información que proporciona el navegador.
$_ENV Tiene variables pasadas al script actual por medio del entorno. Por ejemplo contiene el usuario actual o el nombre de la base de datos del servidor.

Todas las superglobales se usan de la misma forma, por ejemplo, queremos saber de dónde viene un usuario:

O en un formulario HTML con method POST queremos sacar el valor del campo nombre:

Queremos sacar el valor de una cookie que hemos creado y se llama prueba:

Así se usarían las superglobales. En otros post profundizaré con el uso de algunas de ellas.

Precauciones con la superglobales

Las variables superglobales son objetivos de hackers que buscan exploits con el fin de fastidiar tu web. Cargan en $_POST,  $_GET  o en alguna otra superglobal con código malicioso como comandos UNIX o MySQL que pueden dañar o mostrar información sensible.

Para evitar esa clase de cosas hay que sanitizar o limpiar las superglobales antes de usarlas. Una de las formas es con a la función PHP htmlentities. Convierte todos los caracteres aplicables en entidades HTML. Por ejemplo, los caracteres (>) y (<) son transformados en strings “&lt;” y “&gt;”. Un ejemplo de uso:

Y hasta aquí finaliza los conceptos de estructura en PHP. Espero que tengas una buena base. A seguir picando :).