Sobes.tech
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()