Programación en PHP utilizando Programación Orientada a Objetos. Vol. 3

VIE, 19 / MAR / 2021
Tapa ebook programación orientada a objetos en PHP Volumen 3

Para empezar

Esta es la tercera entrega de Programación Orientada a Objetos en PHP, se trata de una colección de 3 ebook con la que estudiarás el paradigma de programación orientada a objetos en PHP, aprendiendo cómo se desarrolla software en este lenguaje, de forma moderna, segura y evitando crear código poco legible, extenso o repetitivo. PHP es un lenguaje muy flexible que permite adoptar distintos paradigmas o maneras de crear aplicaciones, siempre teniendo en cuenta lo que necesitas. La colección es exclusiva de RedUSERS PREMIUM y puedes accederla en los siguientes links: Programación Orientada a Objetos Vol. 1; Programación Orientada a Objetos Vol. 2 y Programación Orientada a Objetos Vol. 3 . A continuación, los primeros temas correspondientes al Vol. 3

API de PHP

En este primer capítulo de la segunda entrega de PHP avanzado, comenzarás a trabajar con las clases que ya se han instalado junto con el lenguaje, y que te permitirán hacerlo de manera sencilla con sus métodos y atributos, para poder reducir todo tu código y crear aplicaciones más seguras.

Primeros pasos

PHP es un lenguaje que te permite programar, orientado a objetos, un paradigma que se basa en la declaración de clases que trabajan como moldes para todos tus objetos, en el que programarás métodos y declararás atributos. A lo largo del volumen anterior, se trabajó en la creación de tus propias clases, cómo crear tus propios métodos y atributos, y de qué forma funcionan en este paradigma.

Pero una de las principales ventajas de trabajar con PHP es que puedes utilizar clases ya programadas en su núcleo. Este núcleo del lenguaje se ubica en el momento en que instalas un servidor de pruebas, como WAMP, LAMP, XAMPP o EasyPHP, para crear aplicaciones y realizar tus pruebas, o si instalas PHP de forma manual, lo cual te permite realizar llamadas directas a estas clases y aprovecharlas para funciones comunes, como la creación de fechas, de la misma forma que llamas a las funciones construidas del lenguaje para usarlas.

Un ejemplo de una clase puede ser la siguiente: dentro de un archivo con extensión PHP, declara una clase, dale un nombre y, dentro, crea algunos métodos y atributos

En este ejemplo, se crea una clase, se declaran algunas funciones y ya se podrían comenzar a usar luego de instanciar un objeto de la clase, o se podrían declarar como estáticas y llamarlas mediante el nombre de la clase. Sin embargo, PHP te da la posibilidad de usar sus clases predefinidas, ya listas para acceder a sus métodos. Para aprender más sobre las clases y objetos en PHP, puedes leer el primer volumen de la colección Programación Orientada a Objetos.

Muchos IDEs (entorno de desarrollo integrado), como PHPStorm, ayudan a desarrollar con consejos y marcando los errores.

 Bases de datos y seguridad

Un ejemplo común y muy útil es la clase MySqli, que te permite crear conexiones con bases de datos MySQL mediante la instanciación de objetos de dicha clase. En su constructor, la clase MySqli define cuatro parámetros que deberás pasarle en el momento de llamarlo: el host o dirección de la base de datos, el usuario, la contraseña y el nombre de la base de datos.

Con esto, se crea una conexión con la base de datos y se pueden comenzar a realizar operaciones y consultas con este objeto, pero en ningún momento fue necesario que definieras la clase MySqli, sino que ya está instalada en el núcleo de PHP y se te permite trabajar con ella solo llamando al constructor desde cualquier sitio de tu aplicación.

Gracias a esta clase y al objeto que acabas de instanciar de ella, se puede llamar al método mysqli_escape_string(), el cual te permitirá realizar una validación sobre los formularios web, para evitar problemas de seguridad, como la inyecciónSQL.

La inyección SQL es una forma típica de ataque a bases de datos relacionales, que se realiza mediante formularios que conectan con este tipo de estructuras de datos, como sistemas de log in, consultas en comercios electrónicos, búsquedas de productos y servicios, búsquedas de información, sistemas con usuarios y otros.

Es muy común utilizar PHP junto con MySQL por su capacidad para crear estos sistemas, pero se debe tener cuidado para hacerlo de forma segura.La inyección se basa en introducir algunos códigos en el campo del formulario, para que la base de datos devuelva datos sensibles que no deberían poder ver todos los usuarios.

Un ejemplo es, en un campo de tipo búsqueda, introducir sentencias SQL para que la base de datos devuelva más información que la deseada, como datos que no se desea que los usuarios vean o, incluso, pueden eliminar tablas completas de datos mediante esta técnica.

Otro ejemplo es que un sistema con usuarios puede retornar datos sensibles, como contraseñas de otros usuarios, si la persona conoce esta metodología de ataque.

Las bases de datos suelen contener información sensible, como contraseñas, por lo que es importante protegerlas

Para evitar esta problemática, la clase mysqli te permitirá instanciar un objeto y, luego, usarlo como argumento para la función que valida el ingreso del usuario. Lo puedes lograr de la siguiente manera:

La función toma dos argumentos: por un lado un objeto de la clase MySqli, en este caso llamado $conexion, y por otro lado el ingreso del usuario. Dado que la inyección SQL se basa en introducir en los formularios códigos SQL que incluyen caracteres especiales, como las comillas simples o el símbolo igual, la función mysqli_escape_string se encarga de convertir estos caracteres para evitar que se generen consultas adicionales en la base de datos.

Para aprender más sobre la inyección SQL y sobre los problemas de seguridad que una aplicación suele presentar, puedes leer el Informe Users sobre Pentesting.

Sin embargo, la conexión que crea la clase MySqli, como su nombre lo indica, te permitirá trabajar con bases de datos MySQL, que es el motor que más se utiliza junto con PHP, aunque no es el único tipo de bases de datos con el que puedes conectar desde una aplicación PHP.

Para esto, cuentas con otra clase de la API, llamada PDO. Esta clase, cuyo nombre proviene de PHP Data Object, te permite conectar con bases de datos tanto de MySQL como de Oracle, Microsoft SQL Server, SQL Azure, entre muchas otras.

Para trabajar con esta clase y aprovechar sus controladores de conexión, puedes instanciar un objeto y utilizar como argumentos en su constructor el tipo de base de datos con la que trabajarás, el nombre, el usuario y la contraseña.Este sería un ejemplo de su uso:

En este ejemplo, se crea una base de datos en tu computadora, por lo que la dirección que se debe especificar es localhost. En el constructor, primero se declara qué tipo de bases de datos usarás, en este caso MySQL, se le especifica el host y luego a qué base de datos se va a conectar dentro del gestor.

Por último, se debe especificar el usuario y la contraseña. Otra ventaja de PDO, además de que te permite trabajar con todo tipo de bases de datos, no solo MySQL, es que puedes crear una capa mayor de seguridad en tus conexiones a bases de datos, evitando así mayores problemas con la inyección SQL.

Para esto, puedes contar con las llamadas consultas preparadas, las que te permiten utilizar un método más que verifique la consulta antes de ser enviada a la base de datos. Luego de crear la conexión PDO, puedes definir la sentencia SQL que necesitas que se envíe.

PDO permite conectar con otras bases de datos además de MySQL

En este ejemplo, se crea la consulta, pero en lugar de colocar la variable que almacena el dato que el usuario ingresó, se le coloca un signo de interrogación. Esto se realiza para que sea un método de la clase PDO la que se encargue de reemplazar ese signo por el término de búsqueda. Para esto, primero tendrás que preparar la sentencia SQL, indicándole al objeto que se trata de una consulta preparada:

Y, por último, necesitarás darle el parámetro de búsqueda que deseas. En este caso, se lo guardará en la variable $nombre, y luego se lo introduce en la consulta SQL de la siguiente forma:

En este ejemplo, crearás una sentencia SQL, que preparaste mediante el método prepare(), de la clase PDO. Luego, como resultado, esto te dará un objeto que contiene una sentencia SQL preparada, que se almacenará en la variable $sentencia.

Mediante el método execute, le tendrás que dar el parámetro de búsqueda que deseas. A este método, si utilizas el parámetro array, puedes indicarle tantos valores de búsqueda como la sentencia SQL tenga; en este caso solo tienes que declarar un valor de búsqueda en la consulta, el campo nombre, pero podrías haber definido más.

Una vez hecho esto, la función execute envía la sentencia al motor de bases de datos y te permite recorrer el resultado mediante un bucle while para ver los resultados:

Esto imprimirá en el navegador los distintos datos de los clientes que tengas almacenados en la base de datos. La función fetch te permite trabajar con el resultado de la base de datos como un array asociativo si le incluyes el argumento FETCH_ASSOC.

La función de crear consultas preparadas en tus aplicaciones es la de evitar la inyección SQL, que puede lograrse con esta capa de seguridad extra que PDO te provee, ya que las consultas solo aceptarán un único valor de búsqueda.

Cuentas con muchas librerías PDO para descargar y trabajar de forma más segura y simplifi cada.

Excepciones

Es muy común crear aplicaciones en entornos de desarrollo y obtener mensajes de error a medida que vayas codificando y modificando tus archivos PHP. Los mensajes de error son útiles para verificar qué problemas pueden darse en tu aplicación y cómo solucionarlos.

Si se trabaja con entornos de desarrollo, los errores incluyen descripciones que te indicarán por qué se lanzaron, cómo se pueden solucionar y en qué línea de tu código fueron lanzados. Estos errores se conocen comúnmente como excepciones, y se suele decir que se lanzan, porque el entorno PHP lanza estas excepciones cuando se encuentran errores en el programa.

Estos errores pueden darse por problemas en tu código, por fallas en la sintaxis, por problemas de conexión con bases de datos o por otros diferentes, y pueden solucionarse depurando el código y resolviendo estas situaciones a medida que suceden. Cuando sucede un error en la ejecución de un programa, PHP crea un objeto de tipo Exception que contiene un mensaje con una descripción del error, el código que generó esta excepción, el nombre del archivo o fichero, y la línea en la que ocurrió exactamente.

Dado que se da toda esta información, es muy útil leer estos mensajes de error para poder solucionarlos. Sin embargo, existen otros errores que pueden ocurrir una vez que esta aplicación ya fue desplegada y se encuentra en uso de un cliente o usuario.

Puede suceder que se elimine un archivo del código, que el usuario ingrese datos erróneos, que ocurran problemas externos al programador y que no pueden preverse. Para manejar estas excepciones, PHP define una forma de operar estos objetos de tipo Exception, para que, al ser lanzados, sean capturados y el programa no corte su ejecución, sino que continúe ejecutándose y realice alguna tarea con ese error.

Si no defi nimos un manejo de excepciones, veremos mensajes de error que crea el servidor

La clase Exception definida en la versión 5 de PHP funciona como superclase de varias otras que representan tipos de errores distintos que pueden darse en la ejecución, errores de conexión, errores aritméticos, entre otros. Para tratar con ellos, puedes definir bloques de código dentro de sentencias try/catch.

Estas palabras clave del lenguaje se utilizan para manejar código que crees o sospechas que puede lanzar errores o excepciones. Dentro del bloque try, se define el código que deseas, el cual crees que puede lanzar excepciones y, en el bloque catch, define lo que quieres que suceda si se produce algún error.Este sería un ejemplo:

En este ejemplo existe una base de datos llamada pruebas, a la cual necesitas conectar mediante la clase PDO. Puede suceder que te equivoques con el usuario, la contraseña, la dirección o el nombre de la base de datos, por lo que el código lanzará un error en su ejecución cuando estés desarrollando la aplicación. Para ver de qué se trata este error y ayudarte a solucionarlo, es posible capturarlo y verlo en el navegador.

Dentro del bloque try, tendrás el código que quieres que se ejecute.

En los parámetros del bloque catch, se define un objeto de tipo Excepción, que se llamará $e, aunque puedes ponerle otro nombre, y se le indicará que imprima en el navegador un mensaje personalizado junto con los datos del error. Si se produce un problema en la ejecución, en lugar de fallar y detener el programa, se mostrará este mensaje y el programa continuará ejecutándose.

Esto es muy útil en el momento en que se está desarrollando alguna aplicación y se necesita ver qué problema existe en ella. Sin embargo, puede que no desees que esto sea lo que vea un usuario una vez que el programa esté en ejecución y se produzca un error.

Puede suceder que la conexión con la base de datos no se produzca, el servidor esté funcionando mal o exista otro problema por lo que la aplicación no pueda resolver las peticiones que el usuario realice. En ese caso, crea un manejo de excepciones que le muestre al usuario un mensaje algo más amigable que los mensajes de error que PHP lanza.

En este ejemplo, la aplicación lanzará un mensaje un poco más amigable al usuario y no cortará su ejecución, sino que permitirá seguir utilizándola. Es importante aclarar que las excepciones y los errores son objetos distintos y no heredan uno de otro, por ende, no todos los errores de una aplicación serán capturados por un objeto de tipo Exception. Para aprender más sobre herencia, puedes leer el Capítulo 1 del primer volumen de esta colección.

Puedes crear tu propio manejo de excepciones personalizadas.

Aprende más sobre Programación Orientada a Objetos en PHP, leyendo la edición completa de este ebook en RedUSERS PREMIUM


Cada mes, lanzamos 2 ebooks USERS, en ellos tratamos en profundidad el tema abordado. En cada ebook, nuestros EXPERTOS vuelcan todos sus conocimientos con el objetivo de brindar una experiencia de capacitación satisfactoria para nuestros lectores.


Lee lo que quieras, donde vayas, por una mínima cuota mensual: SUSCRIBETE!


¡Comparte esta noticia!