Sobes.tech
Junior

Чӣ гуна методҳои ҷодугарӣ дар PHP ҳастанд?

sobes.tech AI

Ҷавоб аз AI

Магічні методи у PHP — це спеціальні методи, які викликаються автоматично при певних обставинах. Їхні імена починаються з двох підкреслень (__).

Список основних магічних методів:

  • __construct(): Викликається при створенні нового об'єкта.
  • __destruct(): Викликається при знищенні об'єкта.
  • __call($name, $arguments): Викликається при спробі викликати недоступний або неіснуючий метод об'єкта.
  • __callStatic($name, $arguments): Викликається при спробі викликати недоступний або неіснуючий статичний метод.
  • __get($name): Викликається при спробі отримати значення недоступної властивості об'єкта.
  • __set($name, $value): Викликається при спробі встановити значення недоступної властивості об'єкта.
  • __isset($name): Викликається при використанні isset() або empty() на недоступній властивості.
  • __unset($name): Викликається при використанні unset() на недоступній властивості.
  • __sleep(): Викликається перед серіалізацією, повертає масив імен властивостей для серіалізації.
  • __wakeup(): Викликається після десеріалізації.
  • __toString(): Дозволяє об'єкту вести себе як рядок при використанні у рядковому контексті.
  • __invoke($args): Викликається, коли скрипт намагається викликати об'єкт як функцію.
  • __set_state(array $properties): Викликається при експорті об'єкта функцією var_export().
  • __clone(): Викликається після завершення клонування об'єкта для налаштування клонів.
  • __serialize(): Викликається серіалізацією, повертає масив даних для серіалізації.
  • __unserialize(array $data): Викликається десеріалізацією, отримує дані з __serialize().

Приклад використання __construct і __destruct:

<?php
class Example {
    public function __construct() {
        echo "Об'єкт створений\n";
    }

    public function __destruct() {
        echo "Об'єкт знищений\n";
    }
}

$obj = new Example();
unset($obj); // Примусове знищення об'єкта
?>

Приклад використання __get і __set:

<?php
class DataStore {
    private $data = [];

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }

    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // Або викинути виключення
    }
}

$store = new DataStore();
$store->name = "Alice"; // Викликає __set
echo $store->name; // Викликає __get
?>