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
?>