Sobes.tech
Junior

Kokius magiškus klasės metodus žinote?

sobes.tech AI

Atsakymas iš AI

PHP egzistuoja eilė specialių metodų, vadinamų "maginėmis". Jie automatiškai kviečiami tam tikrais veiksmais su klasės objektais. Štai keletas jų:

  • __construct(): kviečiamas kuriant naują klasės egzempliorių. Naudojamas objekto inicializacijai.
  • __destruct(): kviečiamas sunaikinant objektą (pavyzdžiui, kai baigiasi skripto vykdymas arba tiesiogiai iškviečiant unset()). Naudojamas išteklių atlaisvinimui.
  • __call($name, $arguments): kviečiamas, kai bandote iškviesti neprieinamą (nematomą dabartiniame kontekste) metodo. $name - iškviečiamo metodo pavadinimas, $arguments - jo argumentų masyvas.
  • __callStatic($name, $arguments): panašus į __call(), bet kviečiamas, kai bandote iškviesti neprieinamą statinį metodą.
  • __get($name): kviečiamas, kai bandote skaityti neprieinamą savybę. $name - savybės pavadinimas.
  • __set($name, $value): kviečiamas, kai bandote įrašyti į neprieinamą savybę. $name - savybės pavadinimas, $value - priskiriama reikšmė.
  • __isset($name): kviečiamas, kai tikrinama neprieinamos savybės egzistavimas naudojant isset() arba empty(). $name - savybės pavadinimas.
  • __unset($name): kviečiamas, kai bandote ištrinti neprieinamą savybę naudojant unset(). $name - savybės pavadinimas.
  • __sleep(): kviečiamas prieš objekto serializaciją naudojant serialize(). Turi grąžinti savybių pavadinimų masyvą, kurias reikia serializuoti.
  • __wakeup(): kviečiamas iškart po objekto deserializacijos naudojant unserialize(). Gali būti naudojamas ryšių ar išteklių atstatymui.
  • __toString(): kviečiamas, kai bandote paversti objektą į eilutę (pavyzdžiui, naudojant echo). Turi grąžinti objekto eilutės reprezentaciją.
  • __invoke(...$args): kviečiamas, kai bandote naudoti objektą kaip funkciją.
  • __set_state(array $properties): kviečiamas, kai atstatote objektą naudojant var_export(). Gauna masyvą, eksportuotą var_export().
  • __clone(): kviečiamas, kai klonuojate objektą naudojant clone. Naudojamas giluminio kopijavimo tikslais.

Svarbu naudoti šiuos metodus atsargiai, nes jų neteisingas naudojimas gali sukelti neprognozuojamą kodo elgesį.