Junior
Kokius magiškus klasių metodus žinote?
sobes.tech AI
Atsakymas iš AI
Maginiai PHP metodai yra specialūs metodai, kurie automatiškai kviečiami tam tikrais įvykiais. Jie prasideda su __ (dvigubas pabraukimas).
Pagrindiniai maginiai metodai:
__construct(): Kviečiamas kuriant naują klasės egzempliorių. Naudojamas objekto inicializacijai.__destruct(): Kviečiamas pašalinus objektą arba užbaigus skriptą. Naudojamas išteklių išlaisvinimui.__call(string $name, array $arguments): Kviečiamas bandant iškviesti neprieinamą arba neegzistuojantį metodą.__callStatic(string $name, array $arguments): Kviečiamas bandant iškviesti neprieinamą arba neegzistuojantį statinį metodą.__get(string $name): Kviečiamas bandant gauti prieigą prie neprieinamos arba neegzistuojančios savybės.__set(string $name, mixed $value): Kviečiamas bandant nustatyti reikšmę neprieinamai arba neegzistuojančiai savybei.__isset(string $name): Kviečiamas, kai kviečiamaisset()arbaempty()šiai savybei.__unset(string $name): Kviečiamas, kai kviečiamaunset()šiai savybei.__serialize(): Kviečiamas prieš objektą serializuojant suserialize(). Grąžina masyvą su savybėmis serializacijai.__unserialize(array $data): Kviečiamas po objekto deserializavimo suunserialize(). Gaukia duomenų masyvą savybėms atkurti.__toString(): Leidžia traktuoti objektą kaip eilutę. Kviečiamas bandant išvesti objektą kaip eilutę (pvz., suecho). Turi grąžinti eilutę.__invoke(...$arguments): Leidžia apdoroti objektą kaip funkciją. Kviečiamas bandant iškviesti objektą kaip funkciją.__set_state(array $properties): Kviečiamas atkurti objektą naudojantvar_export(). Gaukia objekto savybių masyvą.__debugInfo(): Kviečiamas, kai kviečiamavar_dump()ant objekto. Turi grąžinti informacijos masyvą debug'ui.
Pavyzdys naudojant __construct ir __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Objektas su vardu: " . $this->name;
}
}
$obj = new MyClass("Test");
echo $obj; // Iškvies `__toString()`
Pavyzdys naudojant __get ir __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; // Arba išmeskite išimtį
}
}
$obj = new MyClass();
$obj->prop1 = "Reikšmė 1"; // Kvies __set()
echo $obj->prop1; // Kvies __get()