Sobes.tech
Junior

Quali metodi magici delle classi conosci?

sobes.tech AI

Risposta dell'AI

I metodi magici in PHP sono metodi speciali che vengono chiamati automaticamente in determinati eventi. Iniziano con __ (doppio underscore).

Metodi magici principali:

  • __construct(): Viene chiamato quando si crea una nuova istanza della classe. Viene usato per inizializzare l'oggetto.
  • __destruct(): Viene chiamato quando un oggetto viene eliminato o lo script termina. Viene usato per liberare risorse.
  • __call(string $name, array $arguments): Viene chiamato quando si tenta di invocare un metodo non accessibile o inesistente.
  • __callStatic(string $name, array $arguments): Viene chiamato quando si tenta di invocare un metodo statico non accessibile o inesistente.
  • __get(string $name): Viene chiamato quando si tenta di accedere a una proprietà non accessibile o inesistente.
  • __set(string $name, mixed $value): Viene chiamato quando si tenta di impostare un valore a una proprietà non accessibile o inesistente.
  • __isset(string $name): Viene chiamato quando si utilizza isset() o empty() su una proprietà non accessibile o inesistente.
  • __unset(string $name): Viene chiamato quando si utilizza unset() su una proprietà non accessibile o inesistente.
  • __serialize(): Viene chiamato prima della serializzazione dell'oggetto con serialize(). Restituisce un array di proprietà per la serializzazione.
  • __unserialize(array $data): Viene chiamato durante la deserializzazione dell'oggetto con unserialize(). Riceve un array di dati per ripristinare le proprietà.
  • __toString(): Permette di trattare l'oggetto come una stringa. Viene chiamato quando si tenta di stampare l'oggetto come stringa (ad esempio, con echo). Deve restituire una stringa.
  • __invoke(...$arguments): Permette di trattare l'oggetto come una funzione. Viene chiamato quando si tenta di invocare l'oggetto come funzione.
  • __set_state(array $properties): Viene chiamato durante il ripristino dell'oggetto con var_export(). Riceve un array di proprietà dell'oggetto.
  • __debugInfo(): Viene chiamato durante l'uso di var_dump() su un oggetto. Deve restituire un array con informazioni per il debug.

Esempio di utilizzo di __construct e __toString:

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Oggetto con nome: " . $this->name;
    }
}

$obj = new MyClass("Prova");
echo $obj; // Chiamerà __toString()

Esempio di utilizzo di __get e __set:

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

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

    public function __get(string $name): mixed {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // O lanciare un'eccezione
    }
}

$obj = new MyClass();
$obj->prop1 = "Valore 1"; // Chiamerà __set()
echo $obj->prop1; // Chiamerà __get()