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 utilizzaisset()oempty()su una proprietà non accessibile o inesistente.__unset(string $name): Viene chiamato quando si utilizzaunset()su una proprietà non accessibile o inesistente.__serialize(): Viene chiamato prima della serializzazione dell'oggetto conserialize(). Restituisce un array di proprietà per la serializzazione.__unserialize(array $data): Viene chiamato durante la deserializzazione dell'oggetto conunserialize(). 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, conecho). 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 convar_export(). Riceve un array di proprietà dell'oggetto.__debugInfo(): Viene chiamato durante l'uso divar_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()