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 чакырылат
?>