El camino hasta ahora
Ésta es la novena entrada de PHP paso a paso y aunque hemos visto nociones básicas de HTML5 y CSS3, realmente de PHP se ha hablado poco y nuestro proyecto no ha sufrido avances desde las primeras entradas. Todos los comienzos son lentos y difíciles, ya faltan pocos artículos para poder iniciar realmente nuestro proyecto aunque tenemos que seguir sentando las bases para nuestro desarrollo. Hoy atacaremos la declaración de variables, constantes y el uso de funciones.
Variables en PHP
Los lenguajes de programación permiten la declaración de variables. Una variable no es más que una palabra clave escrita con un formato impuesto por el lenguaje, que nos permite almacenar información para su utilización, modificación e interacción entre el resto de elementos de nuestra aplicación.
En PHP una variable se define de la siguiente manera:
$nombre_variable = 'valor';
Es obligatorio que el nombre de una variable se inicie con el caracter $, siendo éste el que le indica a PHP que estamos creando una variable. Tras el $, es obligatorio el uso de una letra o del símbolo _ (subrayado o guión bajo), los siguientes pueden ser letras, guiones bajos (_) o números. Es importante tener en cuenta que el nombre de las variables es «case sensitive» o lo que es lo mismo, sensible a mayúsculas, por lo que las siguientes dos variables son diferentes:
$nombre_variable = 'valor'; $Nombre_variable = 'otro valor';
Cuando se declara una variable, se le da un valor inicial. Éste valor inicial está englobado en uno de los posibles tipos que PHP contempla.
Las variables y los tipos.
En PHP existen 8 tipos, en la documentación oficial se explican al detalle, por lo que aquí sólo se resumirán:
- boolean: Este tipo tiene dos posibles valores: true (verdad) o false (falso).
- integer: Este tipo engloba los números enteros.
- float: Números con coma flotante… vamos los decimales de toda la vida.
- string: Cadenas de texto.
- array: Una matriz de datos.
- object: objectos. Es el resultado de instanciar una clase, algo que se verá cuando lleguemos a la programación orientada a objetos en PHP.
- resource: Hace referencia a un recurso externo. Los usamos mucho sin saberlo: cuando nos conectamos a una base de datos, cuando abrimos un fichero…
- NULL: Representa el vacío.
En lenguajes más estrictos que PHP, cuando se declara una variable es obligatorio incluir, antes de asignarle un valor, el tipo de la variable. De esta forma, si declaras una variable como boolean y luego intentas darle como valor una cadena de texto (string) se generaría un error. Es lo que se conoce como «tipado fuerte«. En el caso de PHP, a la hora de declarar la variable no se especifica el tipo, siendo el lenguaje quien asigna este tipo en función de su valor.
Esto es una ventaja a la hora de obtener flexibilidad, pero tiene sus inconvenientes. De hecho es una de las fuertes críticas que PHP recibió en el pasado… aunque en el maravilloso Python ocurre lo mismo 😉
Además, en PHP también se permite que las variables cambien de tipo. Esto significa que podemos tener lo siguiente:
$variable = 'pepe'; $variable = TRUE;
Y no generará ningún error. Tras la primera declaración la variable será de tipo string, pero posteriormente cambiamos su valor por TRUE y PHP detecta el cambio de tipo a boolean. Esta característica de PHP da gran flexibilidad y rapidez a la hora de programar. Es muy común en PHP que cuando se hace alguna comprobación se retorne el valor en sí (del tipo que sea) o se retorna un FALSE (boolean). Esto no es posible en los lenguajes que no permiten el cambio dinámico de tipo. Por lo tanto, PHP no es un lenguaje de tipado fuerte, es un lenguaje de tipado débil. Al ser un lenguaje de tipado débil nos obliga a ser más estrictos en la documentación y con los estándares porque de no ser así en proyectos grandes y con diferentes programadores reinará el caos. Y, desafortunadamente, el caos reina mucho, pero mucho cuando hablamos de PHP.
Las constantes en PHP
Una constante es, como su propio indica, una expresión cuyo valor no puede ser modificado. Si en nuestra aplicación tenemos una información que se mantiene invariable utilizaremos las constantes en lugar de las variables.
Las constantes son muy utilizadas para definir rutas internas, datos de conexión a la base de datos, etc. Declararemos una constante de la siguiente manera:
define('_CONSTANTE', 'valor');
El nombre de la constante, al igual que el de las variables, permite letras, números y guiones bajos. Es case sensitive y el primer caracter debe ser una letra o un guión bajo. En el caso de las constantes no utilizamos $, en su lugar se utilizó la función define que proporciona PHP. Está bastante extendido declarar las constantes con un _ delante, aunque no es obligatorio.
Variables y constantes predefinidas en PHP
PHP proporciona una serie de variables y constantes que podemos utilizar en cualquier momento. Estas son las variables y constantes predefinidas. Es muy importante conocerlas, especialmente las variables ya que sólo deberíamos modificar una variable predefinida cuando realmente es lo que queremos.
Las funciones en PHP
Las funciones o functions, son porciones de código PHP «independientes». Cuando creamos una aplicación, el código se estructura en función de clases (que veremos más adelante) o funciones.
Cuando se programa utilizando funciones se suele hablar de programación procedural, estructurada o spaguetti code. Cuando se programa utilizando clases, se habla de programación orientada a objetos.
Programar haciendo uso de funciones es el «old style» y desde las primeras versiones de PHP5, PHP ha dado el salto al desarrollo orientado a objetos, siendo a partir de PHP5.5 cuando ésta adquiere su mayor potencial. Nuestro proyecto será orientado a objetos, pero considero interesante e importante conocer el concepto de las funciones ya que aunque programemos orientado a objetos haremos uso de un sinfín de funciones que el propio lenguaje PHP proporciona.
Una función se declara de la siguiente manera:
function miFuncion() { // el codigo de la function }
Lo interesante del uso de las funciones es reciclar código. En nuestras aplicaciones prácticamente todo se repite y son las funciones (o las clases) las que nos permiten ahorrar muchas líneas de código y realizar cambios masivos editando una sola función.
Para hacer uso de una función sólo hay que llamarla:
function miFuncion() { echo 'hola mundo'; } miFuncion();
Además, las funciones pueden recibir valores (parámetros) y retornar información. Para pasar los valores, sólo tenemos que declarar la función indicando entre los paréntesis las variables a utilizar separadas por comas. Para retornar información, se utilizará return.
function miFuncion($variable1, $variable2) { return $variable1 + $variable2; } $variable1 = 2; $variable2 = 3; echo miFuncion($variable1, $variable2);
Dividiendo nuestro hola mundo en funciones y variables
Vamos a coger nuestro sencillo hola mundo y aplicaremos el uso de funciones y variables. Recordamos que nuestro index.php tiene el siguiente código:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8" /> <title><?php echo 'Hola Mundo!'; ?></title> <link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'> <link rel="stylesheet" id="global-css" href="./style.css" type="text/css" media="all" /> </head> <body> <header> <h1><?php echo 'Hola Mundo!'; ?></h1> <!-- <nav>El menú si procediese</nav> --> <!-- Etiqueta comentada al no tener menú --> </header> <section> <article> <h2><?php echo 'Nuestra primera página PHP'; ?></h2> <?php echo 'Nuestra primera página realizada en PHP con HTML5'; ?> </article> </section> <aside> <h3><?php echo 'Artículos relacionados';?></h3> <ul> <li><a href="//rolandocaldas.com/php/primera-toma-de-contacto-php-paso-a-paso" target="_blank"><?php echo 'Primera toma de contacto'; ?></a></li> <li><a href="//rolandocaldas.com/php/html5-estructura-basica" target="_blank"><?php echo 'HTML5 estructura básica'; ?></a></li> </ul> </aside> <footer> <?php echo 'Creado por rolandocaldas.com'; ?> </footer> </body> </html>
Bien, vamos a hacer lo siguiente:
- Crear unas variables con los textos que queremos imprimir.
- Encerraremos el código HTML en una function.
- Llamaremos a la function enviando como parámetros las variables con los textos.
- Nuestra function imprimirá por pantalla el contenido.
Crear unas variables con los textos que queremos imprimir
Bien, al inicio de nuestro index.php abrimos el PHP y creamos las variables con los textos que se imprimen por pantalla:
<?php $aside_contenido = array( '0' => array( 'link' => 'http://rolandocaldas.com/php/primera-toma-de-contacto-php-paso-a-paso', 'titulo' => 'Primera toma de contacto', ), '1' => array( 'link' => 'http://rolandocaldas.com/php/html5-estructura-basica', 'titulo' => 'HTML5 estructura básica', ), ); $aside_titulo = 'Artículos relacionados'; $descripcion = 'Nuestra primera página realizada en PHP con HTML5'; $pie = 'Creado por rolandocaldas.com'; $subtitulo = 'Nuestra primera página PHP'; $titulo = 'Hola mundo!'; ?><!DOCTYPE html> <html lang="es"> (...) </html>
Hay dos cosas que pueden llamar tu atención:
- $aside_contenido: Esta variable está declarada como array, es el tipo matriz y permite eso, crear una matriz de datos. Es algo muy útil y muy utilizado en los lenguajes de programación, que se verá con detenimiento en futuros artículos.
- El orden de declaración: Las variables están declaradas por orden alfabético. Es una costumbre que estoy auto-imponiéndome, desde hace muy poco, a la hora de programar. Cuando un proyecto pasa por muchas manos (o simplemente pasan años desde la última vez que lo modificaste), el código suele ser «caótico» ya sea porque realmente lo es o porque tiene un orden «muy suyo». Utilizar el criterio de orden alfabético es una forma totalmente objetiva de organizar el código y permite a cualquiera que coge el código saber por dónde debe ir a buscar. De hecho, IDE’s como el NetBeans tiene una «ventanita» donde lista el contenido de un fichero agrupado por tipo de contenido y dentro de mismo tipo, alfabético. Me parece una gran idea y, sobre todo en CSS, todos seríamos mucho más felices escribiendo así 😉
Bueno, aunque ya tenemos las variables declaradas, no se están utilizando, por lo que deberemos ir a por el siguiente paso.
Encerraremos el código HTML en una function
Ahora, vamos a coger todo nuestro código HTML y meterlo dentro de una función, esta función recibirá como parámetros las variables declaradas y serán utilizadas en el HTML.
<?php $aside_contenido = array( '0' => array( 'link' => 'http://rolandocaldas.com/php/primera-toma-de-contacto-php-paso-a-paso', 'titulo' => 'Primera toma de contacto', ), '1' => array( 'link' => 'http://rolandocaldas.com/php/html5-estructura-basica', 'titulo' => 'HTML5 estructura básica', ), ); $aside_titulo = 'Artículos relacionados'; $descripcion = 'Nuestra primera página realizada en PHP con HTML5'; $pie = 'Creado por rolandocaldas.com'; $subtitulo = 'Nuestra primera página PHP'; $titulo = 'Hola mundo!'; function imprimir($aside_contenido, $aside_titulo, $descripcion, $pie, $subtitulo, $titulo) { ?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8" /> <title><?php echo $titulo; ?></title> <link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'> <link rel="stylesheet" id="global-css" href="./style.css" type="text/css" media="all" /> </head> <body> <header> <h1><?php echo $titulo; ?></h1> <!-- <nav>El menú si procediese</nav> --> <!-- Etiqueta comentada al no tener menú --> </header> <section> <article> <h2><?php echo $subtitulo; ?></h2> <?php echo $descripcion; ?> </article> </section> <aside> <h3><?php echo $aside_titulo; ?></h3> <ul> <li><a href="<?php echo $aside_contenido['0']['link']; ?>" target="_blank"><?php echo $aside_contenido['0']['titulo']; ?></a></li> <li><a href="<?php echo $aside_contenido['1']['link']; ?>" target="_blank"><?php echo $aside_contenido['1']['titulo']; ?></a></li> </ul> </aside> <footer> <?php echo $pie; ?> </footer> </body> </html> <?php }
Bueno, podemos ver cómo se pasan todas las variables por parámetros y se han colocado en su lugar correspondiente dentro del código HTML. Ahora bien, si accedemos al navegador veremos una página en blanco. Esto es así porque en ningún momento hemos llamado a la function imprimir.
Recuerda que una función es un trozo de código independiente, si nadie lo llama no se ejecuta.
Llamando a la función para imprimir el contenido
Para que nuestro hola mundo vuelva a mostrarse por pantalla, necesitamos llamar a la function imprimir. Como nuestra función no retorna contenido sino que lo imprime, bastará con llamarla, por lo que nuestro código quedará así:
<?php $aside_contenido = array( '0' => array( 'link' => 'http://rolandocaldas.com/php/primera-toma-de-contacto-php-paso-a-paso', 'titulo' => 'Primera toma de contacto', ), '1' => array( 'link' => 'http://rolandocaldas.com/php/html5-estructura-basica', 'titulo' => 'HTML5 estructura básica', ), ); $aside_titulo = 'Artículos relacionados'; $descripcion = 'Nuestra primera página realizada en PHP con HTML5'; $pie = 'Creado por rolandocaldas.com'; $subtitulo = 'Nuestra primera página PHP'; $titulo = 'Hola mundo!'; function imprimir($aside_contenido, $aside_titulo, $descripcion, $pie, $subtitulo, $titulo) { ?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8" /> <title><?php echo $titulo; ?></title> <link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'> <link rel="stylesheet" id="global-css" href="./style.css" type="text/css" media="all" /> </head> <body> <header> <h1><?php echo $titulo; ?></h1> <!-- <nav>El menú si procediese</nav> --> <!-- Etiqueta comentada al no tener menú --> </header> <section> <article> <h2><?php echo $subtitulo; ?></h2> <?php echo $descripcion; ?> </article> </section> <aside> <h3><?php echo $aside_titulo; ?></h3> <ul> <li><a href="<?php echo $aside_contenido['0']['link']; ?>" target="_blank"><?php echo $aside_contenido['0']['titulo']; ?></a></li> <li><a href="<?php echo $aside_contenido['1']['link']; ?>" target="_blank"><?php echo $aside_contenido['1']['titulo']; ?></a></li> </ul> </aside> <footer> <?php echo $pie; ?> </footer> </body> </html> <?php } imprimir($aside_contenido, $aside_titulo, $descripcion, $pie, $subtitulo, $titulo);
Y con esto ya tenemos nuestro código con variables y funciones. Esto nos permitirá cambiar el contenido del texto de forma rápida, editando sólo su valor en la variable correspondiente.
GitHub: Variables, constantes y funciones. PHP paso a paso
En la próxima entrega
Llegados a este punto, el próximo artículo de PHP paso a paso abordará el MVC (Modelo, Vista, Controlador) y transformaremos nuestro hola mundo siguiendo este patrón. Una vez lo logremos, tocará el turno a la programación orientada a objetos lo que nos permitirá transformar nuestro hola mundo al modo de POO.
El articulo correspondiente a MVC ya se encuentra publicado? no lo encuentro….
hola buenas, necesito de tu ayuda, necesito hacer este código y se me hace imposible…
Declare en PHP una clase llamada “Punto” que contenga atributos y métodos necesarios que permitan la definición de un punto en un plano geométrico. Considere la incorporación de una coordenada X, Y, constructor, etc. Tenga presente los modos de acceso necesarios para su clase. Esta clase llamada “Punto” debe heredar de una clase llamada “Figura” la cual debe contener como atributos nombre, color y en sus métodos el constructor y el método imprimir.
Estimado quiero aprender programacion orientado a objetos. Mirando la funcion imprimir diseñada aqui, me dio la senzacion de que tiene los parametros pero ¿donde esta el cuerpo de la funcion? En alguna parte dentro de la funcion imprimir() deberia decir echo «imprime esta $variable que yo quiero cuando yo te haya llamado» asi que ahora estoy confundido porque eso no lo encuetro escrito ahi. saludos