【问题标题】:What happens when a PHP object is echoed? [duplicate]当一个 PHP 对象被回显时会发生什么? [复制]
【发布时间】:2017-03-14 13:08:01
【问题描述】:

如果您查看此库的使用情况, https://github.com/Gregwar/Formidable

你有,

$form = new Gregwar\Formidable\Form('forms/example.html');

$form->handle(function() {
    echo "Form OK!";
}, function($errors) {
    echo "Errors: <br/>";
    foreach ($errors as $error) {
        echo "$error<br />";
    }
});

echo $form;

我的问题是,这是怎么做到的? 你如何回显 $form 对象..

例如,如果我有

class Something
{
   public $somevariable = 'London';

   public function __construct()
   {
     $this->foo();
   }

   public function foo(){
        //Do Something

   }
}

$myObj = new Something();
echo $myObj;

上面的代码给了我一个错误。 我该怎么做才能回显 $myObj 而不会出现错误,以便我可以在屏幕上显示某些内容?

我们都知道我们可以做类似的事情,

echo $myObj->somevariable;

没有错误..我该怎么办

echo $myObj;

不会像在 Formidable 库中那样出错。

【问题讨论】:

标签: php oop


【解决方案1】:

你班上的魔法方法__toString()。当您的对象被视为字符串时(即与 echo 一起使用时),这允许您的类执行该方法中的代码。该方法必须返回一个字符串,否则会引发错误。

您会在链接的库中注意到,它们的表单类中有一个。

/**
 * Convert to HTML
 */
public function __toString()
{
    return $this->getHtml();
}

【讨论】:

    【解决方案2】:

    你可以在你的类中添加__tostring()魔法函数

    class Something
    {
      public $somevariable = 'London';
    
      public function __construct()
      {
        $this->foo();
      }
    
      public function foo(){
        //Do Something
    
      }
      public function __tostring(){
        return $this->somevariable;
      }
    }
    

    致电echo $myObj 将打印伦敦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-21
      • 2022-06-27
      • 2017-03-24
      • 2023-03-25
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      相关资源
      最近更新 更多