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-ის გამოძახება
?>