Sobes.tech
Junior

Kādus burvju metodes klases jūs zināt?

sobes.tech AI

Atbilde no AI

Magiskās metodes PHP ir īpaši metodes, kas automātiski tiek izsauktas noteiktos notikumos. Tās sākas ar __ (dubultu apakšsvītru).

Galvenās magiskās metodes:

  • __construct(): Tiek izsaukta, izveidojot jaunu klases piemēru. To izmanto objekta inicializācijai.
  • __destruct(): Tiek izsaukta, dzēšot objektu vai beidzot skriptu. To izmanto resursu atbrīvošanai.
  • __call(string $name, array $arguments): Tiek izsaukta, mēģinot izsaukt nepieejamu vai neesošu metodi.
  • __callStatic(string $name, array $arguments): Tiek izsaukta, mēģinot izsaukt nepieejamu vai neesošu statisku metodi.
  • __get(string $name): Tiek izsaukta, mēģinot piekļūt nepieejamai vai neesošai īpašībai.
  • __set(string $name, mixed $value): Tiek izsaukta, mēģinot iestatīt vērtību nepieejamai vai neesošai īpašībai.
  • __isset(string $name): Tiek izsaukta, kad tiek izsaukts isset() vai empty() uz nepieejamu vai neesošu īpašību.
  • __unset(string $name): Tiek izsaukta, kad tiek izsaukts unset() uz nepieejamu vai neesošu īpašību.
  • __serialize(): Tiek izsaukta pirms objekta serializācijas ar serialize(). Atgriež īpašību masīvu serializācijai.
  • __unserialize(array $data): Tiek izsaukta pēc objekta deserializācijas ar unserialize(). Saņem datu masīvu īpašību atjaunošanai.
  • __toString(): Ļauj uzskatīt objektu par virkni. Tiek izsaukta, mēģinot izvadīt objektu kā virkni (piemēram, ar echo). Jāatgriež virkne.
  • __invoke(...$arguments): Ļauj apstrādāt objektu kā funkciju. Tiek izsaukta, mēģinot izsaukt objektu kā funkciju.
  • __set_state(array $properties): Tiek izsaukta, atjaunojot objektu ar var_export(). Saņem īpašību masīvu.
  • __debugInfo(): Tiek izsaukta, kad tiek izsaukts var_dump() uz objektu. Jāatgriež informācijas masīvs debugšanai.

Piemērs, izmantojot __construct un __toString:

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Objekts ar nosaukumu: " . $this->name;
    }
}

$obj = new MyClass("Tests");
echo $obj; // Izsauks `__toString()`

Piemērs, izmantojot __get un __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; // Vai izmetiet izņēmumu
    }
}

$obj = new MyClass();
$obj->prop1 = "Vērtība 1"; // Izsauks `__set()`
echo $obj->prop1; // Izsauks `__get()`