0Pricing
PHP Academy · Aula

Visão geral dos métodos mágicos

Aprenda __toString, __get, __set e outros métodos mágicos do PHP.

Visão geral dos métodos mágicos é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.

Introdução: Métodos Mágicos do PHP

Métodos mágicos são métodos especiais do PHP com prefixos de dois sublinhados, acionados automaticamente pelo mecanismo do PHP em situações específicas. Eles fornecem pontos de extensão para o comportamento dos objetos.

Conceitos fundamentais

Conceitos fundamentais dos métodos mágicos do PHP:

  • __toString() — conversão de objeto em texto
  • __get/__set/__isset/__unset — interceptações do acesso a propriedades
  • __call/__callStatic — interceptações de chamadas de métodos
  • __invoke() — objeto chamável

__toString

Exemplo:

<?php
class Money {
    public function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public function __toString(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

$price = new Money(9.99, 'USD');
echo $price;            // 9.99 USD
echo 'Price: ' . $price; // Price: 9.99 USD

__get e __set

Continuação:

<?php
class DynamicObject {
    private array $data = [];

    public function __get(string $name): mixed {
        return $this->data[$name] ?? null;
    }

    public function __set(string $name, mixed $value): void {
        $this->data[$name] = $value;
    }
}

$obj = new DynamicObject();
$obj->name = 'Alice';
echo $obj->name;  // Alice

__isset e __unset

Prática:

<?php
class Model {
    private array $attributes = [];

    public function __set(string $k, mixed $v): void { $this->attributes[$k] = $v; }
    public function __get(string $k): mixed { return $this->attributes[$k] ?? null; }
    public function __isset(string $k): bool { return isset($this->attributes[$k]); }
    public function __unset(string $k): void { unset($this->attributes[$k]); }
}

$m = new Model();
$m->email = 'a@b.com';
var_dump(isset($m->email));  // true
unset($m->email);
var_dump(isset($m->email));  // false

__call e __callStatic

Aprofundamento:

<?php
class FluentQuery {
    private array $clauses = [];

    public function __call(string $name, array $args): static {
        $this->clauses[$name] = $args[0] ?? null;
        return $this;
    }

    public function toSql(): string {
        return 'SELECT * FROM '
            . ($this->clauses['from'] ?? 'unknown');
    }
}

echo (new FluentQuery())->from('users')->toSql();
// SELECT * FROM users

__invoke

Uso avançado:

<?php
class Multiplier {
    public function __construct(private float $factor) {}

    public function __invoke(float $value): float {
        return $value * $this->factor;
    }
}

$double = new Multiplier(2);
echo $double(5);   // 10
echo $double(21);  // 42

$funcs = [new Multiplier(2), new Multiplier(3)];
foreach ($funcs as $fn) echo $fn(4) . ' '; // 8 12

__clone

Padrão do mundo real:

<?php
class Config {
    private array $data = [];

    public function set(string $k, mixed $v): self {
        $this->data[$k] = $v;
        return $this;
    }

    public function __clone() {
        // deep clone nested objects if needed
    }
}

$original = (new Config())->set('theme', 'dark');
$copy = clone $original;  // triggers __clone

__debugInfo

Boas práticas:

<?php
class ApiClient {
    public function __construct(
        private string $baseUrl,
        private string $apiKey  // sensitive!
    ) {}

    public function __debugInfo(): array {
        return [
            'baseUrl' => $this->baseUrl,
            'apiKey'  => '***' . substr($this->apiKey, -4),  // mask key
        ];
    }
}

var_dump(new ApiClient('https://api.example.com', 'secret123'));
// Shows masked key

Padrão prático

Reunindo tudo em um padrão prático para os métodos mágicos do PHP.

Armadilhas comuns

Evite estes erros comuns com os métodos mágicos do PHP:

  • Use __toString() para que os objetos sejam exibidos de forma significativa
  • __get/__set permitem padrões de proxy e decorador
  • __invoke permite que os objetos funcionem como chamáveis (útil com array_map)
  • __debugInfo impede que dados confidenciais apareçam em var_dump

Verificação rápida

Qual método mágico faz com que um objeto PHP possa ser chamado como uma função?

Recapitulação: Métodos Mágicos do PHP

Você estudou os métodos mágicos do PHP. Pontos principais para lembrar:

  • Use __toString() para que os objetos sejam exibidos de forma significativa
  • __get/__set permitem padrões de proxy e decorador
  • __invoke permite que os objetos funcionem como chamáveis (útil com array_map)
  • __debugInfo impede que dados confidenciais apareçam em var_dump

Perguntas Frequentes

A aula “Visão geral dos métodos mágicos” é grátis?

Sim — o texto completo de “Visão geral dos métodos mágicos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.

O que vou aprender em “Visão geral dos métodos mágicos”?

Aprenda __toString, __get, __set e outros métodos mágicos do PHP. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar PHP Academy?

Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Visão geral dos métodos mágicos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de PHP Academy?

Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Classes, propriedades e métodos
  2. Construtores e destrutores
  3. Propriedades e métodos estáticos
  4. Visão geral dos métodos mágicos
← Voltar para PHP Academy