Sobes.tech
Junior

Ի՞նչ կախարդական մեթոդներ եք գիտակցում դասերի համար:

sobes.tech AI

Պատասխան AI-ից

Մագիկ մեթոդները PHP-ում հատուկ մեթոդներ են, որոնք ավտոմատ կերպով կանչվում են որոշակի իրադարձությունների ժամանակ: Նրանք սկսվում են __ (երկու գծիկ):

Հիմնական մագիկ մեթոդները՝

  • __construct(): Կոչվում է նոր դասի օրինակ ստեղծելիս: Օգտագործվում է օբյեկտի ինիցիալիզացման համար:
  • __destruct(): Կոչվում է օբյեկտը ջնջելիս կամ սցենտը ավարտելիս: Օգտագործվում է ռեսուրսների ազատման համար:
  • __call(string $name, array $arguments): Կոչվում է, երբ փորձում եք կանչել հասանելի կամ գոյություն չունեցող մեթոդ:
  • __callStatic(string $name, array $arguments): Կոչվում է, երբ փորձում եք կանչել հասանելի կամ գոյություն չունեցող ստատիկ մեթոդ:
  • __get(string $name): Կոչվում է, երբ փորձում եք մուտք գործել հասանելի կամ գոյություն չունեցող հատկություն:
  • __set(string $name, mixed $value): Կոչվում է, երբ փորձում եք սահմանել արժեք հասանելի կամ գոյություն չունեցող հատկության համար:
  • __isset(string $name): Կոչվում է, երբ կանչում եք isset() կամ empty() այդ հատկության վրա:
  • __unset(string $name): Կոչվում է, երբ կանչում եք unset() այդ հատկության վրա:
  • __serialize(): Կոչվում է, նախքան օբյեկտի սերիալիզացիան serialize()-ի միջոցով:
  • __unserialize(array $data): Կոչվում է, երբ օբյեկտը դեսիալիզացվում է unserialize()-ի միջոցով:
  • __toString(): Позволяет рассматривать объект как строку:
  • __invoke(...$arguments): Позволяет обрабатывать объект как функцию:
  • __set_state(array $properties): Կոչվում է, երբ վերականգնում եք օբյեկտը var_export()-ի միջոցով:
  • __debugInfo(): Կոչվում է, երբ կանչում եք var_dump() օբյեկտի վրա:

Օրինակ __construct և __toString օգտագործման:

<?php
class MyClass {
    private $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function __toString(): string {
        return "Օբյեկտ անվամբ: " . $this->name;
    }
}

$obj = new MyClass("Թեստ");
echo $obj; // Կոչում է `__toString()`

Օրինակ __get և __set օգտագործման:

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

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

    public function __get(string $name): mixed {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }
        return null; // կամ արտահայտել բացառություն
    }
}

$obj = new MyClass();
$obj->prop1 = "Արժեք 1"; // Կոչում է `__set()`
echo $obj->prop1; // Կոչում է `__get()`