Menu
Coddy logo textTech

Introducción a los métodos mágicos

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 44 de 91.

Los métodos mágicos son métodos especiales en PHP que comienzan con guiones bajos dobles (__) y son llamados automáticamente por PHP en respuesta a ciertos eventos o acciones. Ya has utilizado dos de ellos: __construct() y __destruct().

Estos métodos te permiten intervenir en el comportamiento interno de PHP y personalizar cómo responden tus objetos a las operaciones comunes.

Por ejemplo, ¿qué sucede cuando intentas imprimir un objeto? ¿O acceder a una propiedad que no existe? Los métodos mágicos te dan control sobre estas situaciones.

Aquí tienes un breve resumen de los métodos mágicos más utilizados:

MétodoSe activa cuando
__construct()El objeto es creado
__destruct()El objeto es destruido
__toString()El objeto se usa como una cadena
__get()Acceso a una propiedad no definida
__set()Asignación de una propiedad no definida
__call()Llamada a un método no definido
__clone()El objeto es clonado
<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book;

Salida:

Book: PHP Mastery

Sin __toString(), intentar hacer un echo de un objeto causaría un error. El método mágico intercepta esta acción y devuelve una representación de cadena en su lugar. En las próximas lecciones, exploraremos cada método mágico en detalle.

challenge icon

Desafío

Fácil

Vamos a construir un sistema de catálogo de películas que te introducirá a los métodos mágicos. Crearás una clase Movie que utiliza __construct() para inicializar los datos de la película y __toString() para proporcionar una representación de cadena limpia cuando se imprima el objeto.

Organizarás tu código en dos archivos:

  • Movie.php — Crea una clase Movie que represente las películas en tu catálogo. Usa la promoción de constructor para definir propiedades privadas para $title (string), $director (string) y $year (integer). Implementa el método mágico __toString() para devolver una cadena formateada: "[title] ([year]) - Directed by [director]". Esto permite que tus objetos de película sean impresos con echo directamente sin llamar a un método separado.
  • main.php — Incluye el archivo Movie. Recibirás tres entradas: un título de película, un nombre de director y un año de estreno. Crea una instancia de Movie usando estos valores (convierte el año a un entero). Luego, simplemente imprime el objeto movie directamente con echo — el método __toString() se llamará automáticamente para producir la salida.

La magia de __toString() es que PHP lo llama automáticamente cada vez que tu objeto se utiliza en un contexto de cadena. En lugar de escribir echo $movie->getInfo();, puedes simplemente escribir echo $movie; y PHP se encarga de la conversión por ti. Esto hace que tus objetos sean más intuitivos de manejar.

Pruébalo tú mismo

<?php

require_once 'Movie.php';

// Leer la entrada
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));

// TODO: Crear una instancia de Movie utilizando los valores de entrada

// TODO: Imprimir el objeto movie directamente (el método __toString() se llamará automáticamente)

?>
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos