วิธีการมหัศจรรย์ __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 บนหน้าจอแล้ว แสดงสตริงที่มีชื่อและนามสกุลของผู้ใช้