Phương thức ma thuật toString trong OOP PHP

Phương thức ma thuật đầu tiên chúng ta học, được gọi là __toString. Nó được gọi khi cố gắng chuyển đổi một thể hiện của lớp thành chuỗi. Hãy cùng tìm hiểu điều đó có nghĩa là gì. Giả sử chúng ta có lớp User như sau:

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;
    }
  }
?>

Hãy tạo một đối tượng của lớp này:

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

Và bây giờ hãy thử in đối tượng đã tạo qua echo:

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

Việc cố gắng in đối tượng qua echo chính là chuyển đổi thành chuỗi. Trong trường hợp này, PHP sẽ đưa ra lỗi, bởi vì không phải tự nhiên mà các đối tượng có thể chuyển thành chuỗi.

Để loại bỏ lỗi, chúng ta phải nói với PHP một cách rõ ràng, phải làm gì khi cố gắng chuyển đổi đối tượng thành chuỗi. Vì mục đích này mà phương thức ma thuật __toString tồn tại.

Nếu trong mã của lớp chúng ta tạo ra một phương thức như vậy, thì kết quả của phương thức đó (tức là những gì nó trả về qua return) sẽ là biểu diễn dạng chuỗi của đối tượng.

Giả sử chúng ta muốn khi cố gắng in đối tượng qua echo, tên của user được in ra. Điều đó có nghĩa là chúng ta tạo phương thức __toString và trả về trong nó giá trị của thuộc tính name:

User.php<?php
  class User
  {
    private $name;
    private $age;
    
    public function __construct($name, $age)
    {
      $this->name = $name;
      $this->age = $age;
    }
    
    // Triển khai phương thức đã chỉ định:
    public function __toString()
    {
      return $this->name;
    }
    
    public function getName()
    {
      return $this->name;
    }
    
    public function getAge()
    {
      return $this->age;
    }
  }
?>

Hãy kiểm tra:

index.php<?php
  $user = new User('john', 25);
  echo $user; // sẽ in ra 'john' - mọi thứ hoạt động!
?>
Задание 1

Tạo lớp User, trong đó có các thuộc tính name và surn. Hãy làm sao để khi in đối tượng qua echo ra màn hình sẽ in ra một chuỗi chứa tên và họ của người dùng.