- La estructura en PHP: Comentarios, sintaxis y arrays
- La estructura en PHP: Operadores, variables y strings
- 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:
1 |
Define("ROOT_LOCATION", "localhost/prueba/"); |
Para leer el contenido de una variable basta con referirse a él como una variable normal sin el $.
1 |
$mi_directorio = ROOT_LOCATION; |
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
1 2 3 |
function mostrar_fecha($fecha){ return "Hoy es ". $fecha; } |
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.
1 |
echo mostrar_fecha("17 de mayo de 2016"); |
Á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:
1 2 3 4 5 |
function suma($num1, $num2){ $resultado = $num1 + $num2; return "El resultado de la suma es ". $resultado; } echo suma(1,5); |
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:
1 2 3 4 5 6 7 8 |
$mensaje = "El resultado de la suma es "; function suma($num1, $num2){ $resultado = $num1 + $num2; return $mensaje. $resultado; } echo suma(1,5); |
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:
1 2 3 4 5 6 7 8 9 10 |
$string = "El resultado de la suma es "; function suma($num1, $num2){ $resultado = $num1 + $num2; return $resultado; } echo $string . suma(1,5); |
También podemos pasar $mensaje como argumento:
1 2 3 4 5 6 7 8 9 10 |
$string = "El resultado de la suma es "; echo suma($string, 1, 5); function suma($string, $num1, $num2){ $resultado = $num1 + $num2; return $string . $resultado; } |
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.
1 |
global $variable_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:
1 2 3 4 5 6 7 8 9 10 |
function contador(){ static $cuenta = 0; echo $cuenta." "; $cuenta++; } echo contador(); echo contador(); |
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
1 2 3 4 5 |
static $int = 0; // Sí static $int = 1*2; // No static $int = sqrt(144); // No |
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:
1 |
$viene_de= $_SERVER['HTTP_REFERER']; |
O en un formulario HTML con method POST queremos sacar el valor del campo nombre:
1 |
$nombre = $_POST['nombre']; |
Queremos sacar el valor de una cookie que hemos creado y se llama prueba:
1 |
$valor_cookie = $_COOKIE['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 “<” y “>”. Un ejemplo de uso:
1 |
$nombre = htmlentities($_POST['nombre']); |
Y hasta aquí finaliza los conceptos de estructura en PHP. Espero que tengas una buena base. A seguir picando :).