Menu
Coddy logo textTech

Introdução aos Métodos Mágicos

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy. Lição 44 de 91.

Métodos mágicos são métodos especiais em PHP que começam com dois sublinhados (__) e são chamados automaticamente pelo PHP em resposta a determinados eventos ou ações. Você já usou dois deles: __construct() e __destruct().

Esses métodos permitem que você se conecte ao comportamento interno do PHP e personalize como seus objetos respondem a operações comuns.

Por exemplo, o que acontece quando você tenta imprimir um objeto? Ou acessar uma propriedade que não existe? Os métodos mágicos dão a você controle sobre essas situações.

Aqui está uma visão geral rápida dos métodos mágicos mais usados:

MétodoAcionado quando
__construct()O objeto é criado
__destruct()O objeto é destruído
__toString()O objeto é usado como uma string
__get()Acessando uma propriedade indefinida
__set()Definindo uma propriedade indefinida
__call()Chamando um método indefinido
__clone()O objeto é 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;

Saída:

Book: PHP Mastery

Sem __toString(), tentar usar echo com um objeto causaria um erro. O método mágico intercepta essa ação e retorna uma representação em string. Nas próximas lições, exploraremos cada método mágico em detalhes.

challenge icon

Desafio

Fácil

Vamos criar um sistema de catálogo de filmes que apresentará a você os métodos mágicos. Você criará uma classe Movie que usa __construct() para inicializar os dados do filme e __toString() para fornecer uma representação de string limpa quando o objeto for impresso.

Você organizará seu código em dois arquivos:

  • Movie.php: Crie uma classe Movie que represente os filmes do seu catálogo. Use a promoção de construtor para definir propriedades privadas para $title (string), $director (string) e $year (inteiro). Implemente o método mágico __toString() para retornar uma string formatada: "[title] ([year]) - Directed by [director]". Isso permite que seus objetos de filme sejam exibidos diretamente com echo, sem chamar um método separado.
  • main.php: Inclua o arquivo Movie. Você receberá três entradas: o título de um filme, o nome de um diretor e um ano de lançamento. Crie uma instância de Movie usando esses valores (converta o ano para um inteiro). Em seguida, simplesmente use echo diretamente no objeto do filme: o método __toString() será chamado automaticamente para produzir a saída.

A magia de __toString() é que o PHP o chama automaticamente sempre que seu objeto é usado em um contexto de string. Em vez de escrever echo $movie->getInfo();, você pode simplesmente escrever echo $movie;, e o PHP cuida da conversão para você. Isso torna seus objetos mais intuitivos de usar.

Experimente você mesmo

<?php

require_once 'Movie.php';

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

// TODO: Crie uma instância de Movie usando os valores de entrada

// TODO: Faça echo do objeto movie diretamente (o método __toString() será chamado automaticamente)

?>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de PHP online