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