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(): Объектти жол катары карап чыгууга мүмкүндүк берет. echo сыяктуу аракеттерде чакырылат. Жол кайтаруусу керек.
  • __invoke(...$arguments): Объектти функция катары иштетүүгө мүмкүндүк берет. Функция катары чакырганда чакырылат.
  • __set_state(array $properties): var_export() аркылуу объектти калыбына келтирүүдө чакырылат. Мүлктөрдүн массивин алат.
  • __debugInfo(): var_dump() чакырганда чакырылат. Түзөтүү үчүн маалыматтардын массивин кайтарат.

Мисалдар:

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