Junior
Milliseid klassi maagilisi meetodeid te tead?
sobes.tech AI
Vastus AI-lt
PHP-s on maagilised meetodid spetsiaalsed meetodid, mis kutsutakse automaatselt teatud sündmustel. Nad algavad __ (kahe alljoonega).
Peamised maagilised meetodid:
__construct(): Kutsutakse, kui luuakse uus klassi eksemplar. Kasutatakse objekti initsialiseerimiseks.__destruct(): Kutsutakse, kui objekt kustutatakse või skript lõpeb. Kasutatakse ressursside vabastamiseks.__call(string $name, array $arguments): Kutsutakse, kui proovite kutsuda kättesaamatut või mitteolevat meetodit.__callStatic(string $name, array $arguments): Kutsutakse, kui proovite kutsuda kättesaamatut või mitteolevat staatilist meetodit.__get(string $name): Kutsutakse, kui proovite pääseda ligi kättesaamatule või mitteolevale omadusele.__set(string $name, mixed $value): Kutsutakse, kui proovite määrata väärtust kättesaamatule või mitteolevale omadusele.__isset(string $name): Kutsutakse, kui kutsutakseisset()võiempty()selle omaduse jaoks.__unset(string $name): Kutsutakse, kui kutsutakseunset()selle omaduse jaoks.__serialize(): Kutsutakse enne objekti serialiseerimistserialize()abil. Tagastab massiivi omadustest serialiseerimiseks.__unserialize(array $data): Kutsutakse pärast objekti deserialiseerimistunserialize()abil. Saab massiivi andmeid omaduste taastamiseks.__toString(): Võimaldab käsitleda objekti kui stringi. Kutsutakse, kui proovite objekti välja printida või kasutada stringina (näiteksecho). Peab tagastama stringi.__invoke(...$arguments): Võimaldab töödelda objekti kui funktsiooni. Kutsutakse, kui proovite objekti kui funktsiooni kutsuda.__set_state(array $properties): Kutsutakse, kui taastate objektivar_export()abil. Saab massiivi omadustest.__debugInfo(): Kutsutakse, kui teetevar_dump()objekti kohta. Peab tagastama info massiivi silumiseks.
Näide kasutades __construct ja __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Objekt nimega: " . $this->name;
}
}
$obj = new MyClass("Test");
echo $obj; // Kutsutakse `__toString()`
Näide kasutades __get ja __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; // Või erind
}
}
$obj = new MyClass();
$obj->prop1 = "Väärtus 1"; // Kutsutakse `__set()`
echo $obj->prop1; // Kutsutakse `__get()`