Skip to content

Introducción a PHP

Orígenes de PHP

PHP, que originalmente significaba Personal Home Page, fue creado por Rasmus Lerdorf en 1995. Originalmente diseñado como un conjunto de scripts CGI para gestionar tareas de desarrollo web personales. PHP evolucionó hasta convertirse en un intérprete de script del lado del servidor. Esta transformación marcó su paso de ser un conjunto de herramientas de manejo de formularios y bases de datos a un lenguaje de programación completo.

Influencias y Características

PHP ha sido influenciado por una variedad de lenguajes de programación. Incorpora elementos de C, Perl, y, en menor medida, de muchos otros lenguajes de programación como Java y Python. Esto se refleja en su sintaxis y funcionalidades, ofreciendo una mezcla de características de programación procedural y orientada a objetos.

PHP es conocido por su flexibilidad y simplicidad, lo que lo hace ideal para principiantes, mientras que su profundidad y amplia gama de funcionalidades lo hacen también poderoso para proyectos complejos. Entre sus características principales, se destacan:

  • Facilidad de integración con HTML: PHP se puede insertar directamente en el código HTML.
  • Conexión con bases de datos: PHP maneja fácilmente la conexión a varias bases de datos, siendo MySQL la más común.
  • Gestión de sesiones: PHP es excelente en la gestión de sesiones de usuario, lo que es esencial para crear sitios web dinámicos.
  • Amplia comunidad y recursos: Existe una gran comunidad de desarrolladores de PHP y numerosos recursos y documentación disponibles.

Propósito y Evolución

El propósito de PHP siempre ha sido facilitar el desarrollo web. Con el tiempo, ha sido ampliamente adoptado y se ha convertido en uno de los lenguajes de programación del lado del servidor más populares. La versión más reciente es la PHP 8.3, que incluye mejoras en rendimiento, nuevas características, y una mayor seguridad.

Ejemplo Básico: Hola Mundo en PHP

Un ejemplo simple de PHP es el script “Hola Mundo”. Aquí está el código para un script básico que muestra “Hola Mundo”:

<?php
echo "Hola Mundo!";
?>

Frameworks en PHP

En el mundo de PHP, existen varios frameworks que ayudan a estructurar el desarrollo de aplicaciones, como Laravel, Symfony, CodeIgniter, y Zend Framework. Entre estos, Symfony se destaca por su arquitectura robusta y su enfoque en aplicaciones empresariales. Symfony es conocido por su modularidad, rendimiento y herramientas de desarrollo amigables.

Para más información sobre PHP y sus características, visita la página oficial de PHP.

Estructuras de Control Básicas en PHP

En PHP, las estructuras de control son fundamentales para la creación de scripts dinámicos. A continuación, se presentan algunos ejemplos comunes:

Condicional: If-Else

La estructura condicional if-else permite ejecutar diferentes bloques de código basados en condiciones.

<?php
$numero = 10;
if ($numero > 5) {
echo "El número es mayor que 5."; // Esta línea se ejecuta si la condición es verdadera
} else {
echo "El número es menor o igual a 5."; // Esta línea se ejecuta si la condición es falsa
}
// Salida esperada: El número es mayor que 5.
?>

Bucle for

Un bucle for se utiliza para iterar un bloque de código un número definido de veces.

<?php
for ($i = 1; $i <= 5; $i++) {
echo "El valor de i es: $i\n"; // Imprime el valor de i en cada iteración
}
// Salidas esperadas: El valor de i es: 1 ... El valor de i es: 5
?>

Bucle foreach

El bucle foreach es utilizado para iterar sobre cada elemento de un array.

<?php
$array = array("manzana", "banana", "cereza");
foreach ($array as $fruta) {
echo "Fruta: $fruta\n"; // Imprime cada elemento del array
}
// Salidas esperadas: Fruta: manzana, Fruta: banana, Fruta: cereza
?>

Bucle while

Un bucle while ejecuta un bloque de código mientras la condición especificada sea verdadera.

<?php
$i = 1;
while ($i <= 5) {
echo "El valor de i es: $i\n"; // Imprime el valor de i mientras sea menor o igual a 5
$i++;
}
// Salidas esperadas: El valor de i es: 1 ... El valor de i es: 5
?>

array_map()

array_map aplica una función a cada elemento de un array.

<?php
function cuadrado($num)
{
return $num * $num; // Devuelve el cuadrado del número
}
$a = [1, 2, 3, 4, 5];
$b = array_map('cuadrado', $a);
print_r($b); // Imprime el array resultante
// Salida esperada: Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => 25 )
?>

Clases y objetos en PHP

La Programación Orientada a Objetos (POO) en PHP permite a los desarrolladores organizar el código en estructuras modulares como clases, con propiedades y métodos. A continuación, se muestra un ejemplo de una clase con métodos públicos y privados, y su posterior invocación:

Clase con Métodos Públicos y Privados

<?php
final readonly class Saludo {
public function __construct(private string $mensaje)
{
}
public function mostrarSaludo() {
echo $this->getMensajePrivado(); // Invoca un método privado dentro de un método público
}
private function getMensajePrivado() {
return $this->mensaje; // Retorna el valor de la propiedad privada
}
}
// Nota: __construct es el método constructor de la clase.
?>

Para utilizar la clase Saludo, primero se debe crear una instancia de la misma y luego invocar su método público.

$saludo = new Saludo("Hola Mundo"); // Creando una instancia de la clase Saludo con un mensaje
$saludo->mostrarSaludo(); // Invocación del método público que a su vez llama a un método privado
// Salida esperada: Hola Mundo
?>

Manejo de errores

El manejo de errores con excepciones es una parte fundamental del desarrollo de aplicaciones seguras y confiables. PHP proporciona varias formas de tratar los errores y las excepciones. Las excepciones son una forma más avanzada y orientada a objetos de manejar errores.A continuación, se describe el manejo básico de errores y excepciones.

Manejo Básico de Excepciones

Puedes usar try, catch y finally para manejar excepciones. Las excepciones que se lanzan pero no se capturan con un catch provocarán un error fatal. En el siguiente ejemplo vemos como capturar una excepción de tipo general (la clase Exception ya viene incluída en PHP).

<?php
function dividir($dividendo, $divisor) {
if ($divisor == 0) {
throw new Exception("División por cero.");
}
return $dividendo / $divisor;
}
try {
echo dividir(5, 0);
} catch (Exception $e) {
echo "Capturada excepción: " . $e->getMessage();
} finally {
echo "\nSiempre se ejecuta esto al final.";
}
// Salida esperada: Capturada excepción: División por cero.
// Y siempre se ejecuta la sección finally.
?>

Veamos ahora como crear una clase de de excepción personalizada para capturar sólo aquello que nos interesa y para dar más semántica al código:

<?php
final readonly class MiExcepcion extends Exception {
}
?>

Uso de la excepción personalizada:

<?php
public function hacerAlgo($param) {
if ($param <= 0) {
throw new MiExcepcion("El parámetro debe ser positivo", 1);
}
return "Haciendo algo con $param";
}
try {
echo hacerAlgo(-1);
} catch (MiExcepcion $e) {
echo $e->mensajePersonalizado();
// Manejo adicional de la excepción si es necesario
}
// Salida esperada: Error personalizado: [1]: El parámetro debe ser positivo
// en la línea X en el archivo Y (donde X e Y son los detalles de la línea y el archivo)
?>

Estas técnicas de manejo de errores y excepciones permiten a los desarrolladores controlar mejor el flujo de la aplicación y proporcionar respuestas más precisas a los usuarios ante situaciones inesperadas.

Herencia

La herencia es un principio fundamental de la Programación Orientada a Objetos (POO) que permite a una clase (llamada clase hija) heredar propiedades y métodos de otra clase (llamada clase padre). Esto facilita la reutilización y extensión de código. A continuación, se muestra un ejemplo de cómo se implementa la herencia en PHP.

Vamos a crear una clase base llamada Vehiculo y una clase derivada llamada Coche.

Clase Padre Vehiculo:

<?php
readonly class Vehiculo {
public function __construct(protected string $marca, protected string $color)
{
}
public function mostrarDetalles() {
return "Marca: $this->marca, Color: $this->color";
}
}
?>

Clase hija:

<?php
final readonly class Coche extends Vehiculo {
public function __construct(string $marca, string $color, string $modelo) {
parent::__construct($marca, $color); // Llama al constructor de la clase padre
}
public function mostrarModelo() {
return "Modelo: $this->modelo";
}
}
?>

Uso de las Clases con Herencia

Ahora, crearemos una instancia de Coche y usaremos sus métodos, incluidos los heredados de Vehiculo.

<?php
$miCoche = new Coche("Toyota", "Rojo", "Corolla");
echo $miCoche->mostrarDetalles(); // Salida: Marca: Toyota, Color: Rojo
echo $miCoche->mostrarModelo(); // Salida: Modelo: Corolla
?>

En este ejemplo, Coche hereda propiedades y métodos de Vehiculo, pero también define sus propios métodos y propiedades, demostrando la potencia y flexibilidad de la herencia en la POO. Esto nos permite, por así decirlo, crear un modelo funcional padre y poder usarlo en diferentes implementaciones hijas

Composición de clases:

La composición es una técnica en la Programación Orientada a Objetos (POO) donde una clase incluye o utiliza instancias de otras clases en su propia estructura (el propósito es básicamente el mismo que el de la herencia). Esto permite una mayor flexibilidad y reutilización del código. A continuación, se muestra cómo se implementa la composición en PHP.

Ejemplo de Composición

Vamos a crear dos clases, Motor y Coche, donde Coche incluirá una instancia de Motor.

Clase Motor

<?php
final readonly class Motor {
public function __construct(private string $tipo)
{
}
public function obtenerTipo() {
return $this->tipo;
}
}
?>

Clase Coche

La clase Coche tiene un objeto Motor como parte de su composición.

<?php
class Coche {
public function __construct(private string $marca, private Motor $motor)
{
}
public function detallesDelCoche() {
return "Marca: $this->marca, Motor: " . $this->motor->obtenerTipo();
}
}
?>

Uso de la Composición

Creamos un Motor y luego lo pasamos al constructor de Coche.

Este enfoque de composición en la POO en PHP demuestra cómo se pueden combinar distintas clases para crear estructuras más complejas y modulares, facilitando así la gestión del código y aumentando la reutilización.

Herencia vs Composición en PHP

En la programación orientada a objetos, tanto la herencia como la composición son técnicas utilizadas para crear relaciones entre clases. Aunque ambas tienen sus usos y ventajas, la composición a menudo es preferida por varias razones. A continuación, exploramos las ventajas de la composición sobre la herencia.

Composición

La composición implica construir clases complejas a partir de otras clases más sencillas, creando relaciones entre ellas mediante sus instancias. Las principales ventajas de la composición incluyen:

  • Mayor Flexibilidad: En la composición, cambiar el comportamiento de una clase es tan simple como reemplazar un componente con otro. Esto es más flexible que usar la herencia, donde el comportamiento está definido y extendido en una jerarquía rígida de clases.

  • Evita la Herencia Profunda: Las jerarquías de herencia profundas pueden hacer que el código sea difícil de entender y mantener. La composición permite una estructura más plana y modular.

  • Favorece el Principio de Responsabilidad Única: Con la composición, es más fácil diseñar clases que se adhieran al principio de responsabilidad única. Cada clase puede enfocarse en una tarea específica, mientras que en la herencia, una clase base puede acumular responsabilidades de sus clases derivadas.

  • Mayor Semántica y Control sobre el Código: La composición ofrece un enfoque más intuitivo al diseñar sistemas. Se puede pensar en términos de “tener” componentes en lugar de “ser” un tipo de componente, lo que suele reflejar mejor el mundo real y los problemas que intentamos resolver.

Herencia

La herencia permite a una clase heredar propiedades y métodos de otra. Aunque útil, la herencia tiene algunas desventajas en comparación con la composición:

  • Acoplamiento Estrecho: La herencia crea un acoplamiento estrecho entre las clases base y derivadas. Los cambios en la clase base pueden tener efectos secundarios no deseados en las clases derivadas.

  • Jerarquías Rígidas: Las jerarquías de herencia pueden volverse complejas y difíciles de manejar, especialmente cuando se abusa de la herencia para reutilizar el código.


En resumen, aunque la herencia sigue siendo un pilar de la POO, la composición ofrece una mayor flexibilidad y control, favoreciendo un diseño de software más mantenible y escalable. En la práctica, es común usar una combinación de ambas técnicas, eligiendo la más adecuada según las necesidades del diseño.

Para finalizar:


PHP Desde Cero: Primeros Pasos

Tutorial de primeros pasos con el lenguaje de programación PHP.

🔗 Tienes toda la información, código y links aquí

#Video tutorial#MoureDev