Sobrecarga en PHP extendiendo la clase Laravel Collection

Cuando trabajamos con bases de datos en Laravel hacemos uso del ORM que trae consigo el framework por defecto, se trata de Eloquent, el cual nos ofrece un gran número de métodos muy útiles al momento de interactuar con cada modelo de datos (o tabla dentro de una base de datos). Por ejemplo

// Nueva instancia del modelo user
$user = new User;
// Devuelve el registro con id = 1
$user->find(1);

Para mas información sobre Eloquent visita nuestros tutoriales al respecto.

Esto es gracias a la clase Collection de Eloquent que a su vez extiende de la clase Illuminate\Support\Collection de Laravel. Esta clase nos ofrece también otra forma de trabajar con variables de tipo Array gracias al helper collect() de Laravel.

$array = [1,2,3,4,5];
$collection = collect($array);

// Devuelve "1" -- el primer elemento del array
$collection->first();

Visita el post sobre Uso de colecciones en Laravel.

Desafortunadamente cuando usamos el helper collect() no podemos obtener los valores de un array de la misma forma que lo hacemos con los objetos de Eloquent; Es decir, no podemos llamar $user->name, por el contrario tenemos que usar el método get() para obtener el valor.

$user = ['name' => 'Joe', 'age' => 25];

$user = collect($user);

$user->get('name');

Vamos a solucionar ese problema extendiendo la funcionalidad de la clase Illuminate\Support\Collection en una nueva clase que llamaremos Collector. Primero crearemos un nuevo directorio llamado Collector dentro de la carpeta app/. Una vez hecho esto, vamos a crear un nuevo archivo para nuestra clase llamado Collector.php que extenderá a la clase Illuminate\Support\Collection.

Ver post

Creación y uso de excepciones personalizadas con PHP y PHPUnit

Esta lección forma parte del curso avanzado de creación de componentes para PHP y Laravel,

Una excepción es un evento inesperado que ocurre durante la ejecución de un programa e interrumpe la ejecución normal del mismo.

Una excepción es lanzada desde un método cuando las condiciones para la ejecución normal de dicho método no se cumplen, y luego puede ser atrapada en algún lugar del sistema utilizando un bloque try / catch.

La idea cuando estamos creando nuestros métodos y necesitamos crear una excepción, es crear una clase personalizada cuyo nombre debe describir qué componente produjo el error o cuál fue el error.

Además, aunque se produzca una excepción no «atrapada» en nuestro código, podemos, de igual forma, escribir una prueba con PHPUnit para probar este comportamiento.

Todo esto lo veremos en detalle en la lección de hoy:

Regístrate para ver ésta y cientos de lecciones exclusivas.

Combinar HTML y PHP sin morir en el intento

combinar-html-y-php

Todos amamos las sintaxis que nos provee el motor de plantillas Blade para escribir nuestras vistas, y no es el único, hay otros motores de plantillas geniales como Twig o Smarty, escritos en y para PHP.

Pero imaginemos por un momento que tienes un proyecto que no está usando ningún framework: quizás te toque escribir código para WordPress como a mí, o editar algo de «legacy code» de un proyecto, e instalarle Smarty o algún otro template engine no es una opción viable. Ver post

Uso de métodos mágicos en PHP

metodos-magicos-php

¿Alguna vez te has preguntado cómo funcionan ORMs como Eloquent? Eloquent y otros ORMs en PHP hacen uso de algo llamado Métodos mágicos

Los métodos mágicos mágicos los provee PHP y nos permiten realizar ciertas tareas orientadas a objetos.

Los métodos mágicos identifican por el uso de dos guiones bajos “__” como prefijo, y funcionan como interceptores que se llaman automáticamente cuando ocurre una condición.

Ver post

Aprende programación orientada a objetos: Patrón Factory

factory

Cuando trabajamos con clases y objetos en la programación orientada a objetos, generalmente estamos escribiendo código de 2 tipos:

  1. Código encargado de instanciar (o crear) otros objetos
  2. Código que realiza operaciones con dichos objetos

Por ejemplo, consideren que están intentando conectarse al API de un servicio de E-mail o SMS, seguramente necesitarán un KEY para crear el objeto y quizás el email <from> por defecto:

$key = Config::get('mailer.key');
$mailer = new Vendor\Api\Mailer($key, '[email protected]');

Y ahora para enviar emails harían algo como:

Ver post

Suscríbete a nuestro boletín

Te enviaremos publicaciones con consejos útiles y múltiples recursos para que sigas aprendiendo.

Suscríbete a nuestro boletín

Recibe consejos útiles, promos y múltiples recursos directamente en tu correo.

Tu nombre y correo serán enviados directamente a MailChimp. No compartiremos tus datos con otras empresas.