მაგიური მეთოდი 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-ის მეშვეობით ეკრანზე გამოვიდეს მომხმარებლის სახელი და გვარი.