Кадом усулҳои ҷодугарӣ дар PHP вуҷуд доранд ва чӣ гуна истифода мешаванд?
sobes.tech AI
Ҷавоб аз AI
Магічні методи у PHP — це спеціальні методи, що починаються з подвійного підкреслення (наприклад, __construct), які автоматично викликаються у певних ситуаціях.
Основні магічні методи та їх використання:
-
__construct(): Викликається при створенні об'єкта класу. Використовується для ініціалізації властивостей об'єкта та виконання початкових дій.<?php class MyClass { public function __construct() { echo "Об'єкт створено!"; } } $obj = new MyClass(); // Виведе "Об'єкт створено!" -
__destruct(): Викликається при знищенні об'єкта (наприклад, коли скрипт завершується або об'єкт видаляється з пам'яті). Використовується для звільнення ресурсів (закриття файлів, з'єднань з базами даних).<?php class MyClass { public function __destruct() { echo "Об'єкт знищено!"; } } $obj = new MyClass(); unset($obj); // Виведе "Об'єкт знищено!" -
__call(string $name, array $arguments): Викликається при спробі викликати недоступний або неіснуючий метод у контексті об'єкта.$nameмістить ім'я методу, а$arguments— масив аргументів.<?php class MyClass { public function __call($name, $arguments) { echo "Викликано недоступний метод '{$name}' з аргументами: " . implode(', ', $arguments); } } $obj = new MyClass(); $obj->nonExistentMethod('arg1', 'arg2'); // Виведе "Викликано недоступний метод 'nonExistentMethod' з аргументами: arg1, arg2" -
__callStatic(string $name, array $arguments): Викликається при спробі викликати недоступний або неіснуючий статичний метод у контексті класу. Аналогічний__call, але для статичних викликів.<?php class MyClass { public static function __callStatic($name, $arguments) { echo "Викликано недоступний статичний метод '{$name}' з аргументами: " . implode(', ', $arguments); } } MyClass::nonExistentStaticMethod('static_arg'); // Виведе "Викликано недоступний статичний метод 'nonExistentStaticMethod' з аргументами: static_arg" -
__get(string $name): Викликається при спробі отримати значення недоступного або неіснуючого властивості у контексті об'єкта.$nameмістить ім'я властивості.<?php class MyClass { private $data = ['key' => 'value']; public function __get($name) { if (array_key_exists($name, $this->data)) { return $this->data[$name]; } return null; } } $obj = new MyClass(); echo $obj->key; // Виведе "value" echo $obj->nonExistentKey; // Виведе порожній рядок (залежно від поверненої null) -
__set(string $name, mixed $value): Викликається при спробі встановити значення недоступного або неіснуючого властивості у контексті об'єкта.$nameмістить ім'я властивості, а$value— встановлюване значення.<?php class MyClass { private $data = []; public function __set($name, $value) { $this->data[$name] = $value; } public function getData() { return $this->data; } } $obj = new MyClass(); $obj->newKey = 'newValue'; print_r($obj->getData()); // Виведе Array ( [newKey] => newValue ) -
__isset(string $name): Викликається при викликуisset()абоempty()на недоступному або неіснуючому властивості у контексті об'єкта. Повертає булеве значення.<?php class MyClass { private $data = ['present' => 'value']; public function __isset($name) { return array_key_exists($name, $this->data); } } $obj = new MyClass(); var_dump(isset($obj->present)); // Виведе bool(true) var_dump(isset($obj->absent)); // Виведе bool(false) -
__unset(string $name): Викликається при викликуunset()на недоступному або неіснуючому властивості у контексті об'єкта.<?php class MyClass { private $data = ['remove_me' => 'value_to_remove']; public function __unset($name) { if (array_key_exists($name, $this->data)) { unset($this->data[$name]); echo "Властивість '{$name}' видалено.\n"; } } public function getData() { return $this->data; } } $obj = new MyClass(); print_r($obj->getData()); unset($obj->remove_me); // Виведе "Властивість 'remove_me' видалено." і видалить елемент з $data print_r($obj->getData()); -
__sleep(): Викликається перед серіалізацією об'єкта за допомогоюserialize(). Має повернути масив імен властивостей, які потрібно серіалізувати.<?php class MyClass { public $prop1 = 'value1'; public $prop2 = 'value2'; public function __sleep() { return ['prop1']; // Серіалізуємо лише prop1 } } $obj = new MyClass(); $serialized = serialize($obj); // Серіалізує лише prop1 echo $serialized; // Виведе приблизно O:7: