我们在 PHP 中在哪里以及为什么使用 __toString()?

2022-08-30 13:25:19

我理解它是如何工作的,但是我们为什么要实际使用它呢?

<?php
    class cat {
        public function __toString() {
            return "This is a cat\n";
        }
    }

    $toby = new cat;
    print $toby;
?>

这不就是这个:

<?php
    class cat {
        public function random_method() {
            echo "This is a cat\n";
        }
    }

    $toby = new cat;
    $toby->random_method();
?>

我们不能只使用任何其他公共方法来输出任何文本吗?为什么我们需要这样的神奇方法?


答案 1

你不需要它。但是定义它允许将对象隐式转换为字符串,这很方便。

具有直接被视为不良形式的成员函数,因为它对类本身的输出进行了过多的控制。您希望从成员函数返回字符串,并让调用方决定如何处理它们:是将它们存储在变量中,还是将它们存储出来,或者其他什么。使用 magic 函数意味着您不需要显式函数调用即可执行此操作。echoecho


答案 2

除了所有现有的答案之外,这里还有一个例子:

class Assets{

  protected 
    $queue = array();

  public function add($script){
    $this->queue[] = $script;
  }

  public function __toString(){    
    $output = '';    
    foreach($this->queue as $script){
      $output .= '<script src="'.$script.'"></script>';
    }    
    return $output;
  }

}


$scripts = new Assets();

这是一个简单的类,可以帮助您管理javascript。您可以通过调用 来注册新脚本。$scripts->add('...')

然后,要处理队列并打印所有已注册的脚本,只需调用 。print $scripts;

显然,这个类在这种形式下是毫无意义的,但是如果你实现资产依赖关系,版本控制,检查重复包含等,它开始有意义(示例)。

基本思想是,此对象的主要目的是创建字符串(HTML),因此在这种情况下使用__toString很方便...


推荐