Junior
Koje magične metode klasa poznajete?
sobes.tech АИ
Одговор од АИ
Магични методи у PHP су специјални методи који се аутоматски позивају при одређеним догађајима. Почевши са __ (двојно подебљано).
Главни магични методи:
__construct(): Позива се приликом креирања новог примерка класе. Користи се за иницијализацију објекта.__destruct(): Позива се приликом брисања објекта или завршетка скрипте. Користи се за ослобађање ресурса.__call(string $name, array $arguments): Позива се приликом покушаја позива недоступне или не постојеће методе.__callStatic(string $name, array $arguments): Позива се приликом покушаја позива недоступне или не постојеће статичке методе.__get(string $name): Позива се приликом покушаја приступа недоступној или не постојећој својини.__set(string $name, mixed $value): Позива се приликом покушаја постављања вредности недоступној или не постојећој својини.__isset(string $name): Позива се приликом позиваisset()илиempty()на недоступној или не постојећој својини.__unset(string $name): Позива се приликом позиваunset()на недоступној или не постојећој својини.__serialize(): Позива се пре серијализације објекта помоћуserialize(). Враћа низ својстава за серијализацију.__unserialize(array $data): Позива се приликом десериализације објекта помоћуunserialize(). Добија низ података за опоравак својстава.__toString(): Омогућава да се објекат третира као низ. Позива се приликом покушаја исписа објекта као низа (нпр. помоћуecho). Мора враћати низ.__invoke(...$arguments): Омогућава обраду објекта као функције. Позива се приликом покушаја позива објекта као функције.__set_state(array $properties): Позива се приликом опоравка објекта помоћуvar_export(). Добија низ својстава објекта.__debugInfo(): Позива се приликомvar_dump()на објекту. Мора враћати низ са информацијама за дебаговање.
Пример коришћења __construct и __toString:
<?php
class MyClass {
private $name;
public function __construct(string $name) {
$this->name = $name;
}
public function __toString(): string {
return "Објекат са именом: " . $this->name;
}
}
$obj = new MyClass("Тест");
echo $obj; // Позива __toString()
Пример коришћења __get и __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; // Или изузетак
}
}
$obj = new MyClass();
$obj->prop1 = "Вредност 1"; // Позива __set()
echo $obj->prop1; // Позива __get()