Կախարդական toString մեթոդը OOP-ում PHP-ում

Առաջին կախարդական մեթոդը, որը մենք կուսումնասիրենք, կոչվում է __toString: Այն կանչվում է, երբ դասի օրինակը փորձում ենք վերածել տողի: Եկեք հասկանանք, թե դա ինչ է նշանակում: Ենթադրենք, մենք ունենք User անունով դաս.

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Եկեք ստեղծենք այս դասի օբյեկտ.

index.php<?php
  $user = new User('john', 25);
?>

Հիմա փորձենք արտածել ստեղծված օբյեկտը echo-ի միջոցով.

index.php<?php
  $user = new User('john', 25);
  echo $user;
?>

echo-ի միջոցով օբյեկտը արտածելու փորձը նշանակում է դրա վերածումը տողի: Այս դեպքում PHP-ն կտա սխալ, քանի որ օբյեկտները հենց այդպես չեն կարող վերածվել տողի:

Սխալից խուսափելու համար մենք պետք է միանշանակ ասենք PHP-ին, թե ինչ անել, երբ փորձում ենք օբյեկտը վերածել տողի: Հենց դրա համար էլ գոյություն ունի __toString կախարդական մեթոդը:

Եթե մեր դասի կոդում ավելացնենք այս մեթոդը, ապա այդ մեթոդի արդյունքը (այսինքն այն, ինչ այն կվերադարձնի return-ի միջոցով) կլինի օբյեկտի տողային ներկայացումը:

Ենթադրենք, մենք ցանկանում ենք, որ echo-ի միջոցով օբյեկտը արտածելիս արտածվի օգտագործողի անունը: Սա նշանակում է, որ մենք պետք է ստեղծենք __toString մեթոդը և դրանում վերադարձնենք name հատկության արժեքը.

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    // Իրականացնում ենք նշված մեթոդը.
    public function __toString()
    {
      return $this->name;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Ստուգենք.

index.php<?php
  $user = new User('john', 25);
  echo $user; // կարտածի 'john' - ամեն ինչ աշխատում է:
?>
Задание 1

Ստեղծեք User դաս, որում կլինեն name և surn հատկությունները: Կարգավորեք այնպես, որ օբյեկտը echo-ի միջոցով արտածելիս էկրանին արտածվի օգտագործողի անունն ու ազգանունը: