PHPのOOPにおけるマジックメソッド__toString

最初に学ぶマジックメソッドは、__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

nameとsurnプロパティを持つUserクラスを作成してください。 echoでオブジェクトを出力した際に、ユーザーの名前と姓が書かれた文字列が画面に表示されるようにしてください。