PHP类错误:indexPageClass类的对象无法转换为字符串.如何解决这类问题


PHP Class error: Object of class indexPageClass could not be converted to string. How to solve this kind of issue?

当我尝试运行代码时,浏览器显示以下错误消息:

Object of class indexPageClass could not be converted to string

这是试图创建对象的代码:

$res = new indexPageClass();
echo $res;

这是类indexPageClass:

class indexPageClass {
public function _construct() {
              $TopBar= $this->Header_TopBar_Content_lsti_();
return $TopBar;
 } 
private function Header_TopBar_Content_lsti_() {
$str=<<<EOF
<ul>
<li>
    <i class="fa fa-globe"></i>
    <a>Languages</a>
    <ul class="lenguages">
        <li class="active">
            <a href="#">English <i class="fa fa-check"></i></a> 
        </li>
        <li><a href="#">Spanish</a></li>
    </ul>
</li>
<li class="topbar-devider"></li>                       
<li><a data-toggle="modal" data-target="#responsive">Login</a></li>  
</ul>
EOF;
return $str;  
 } 
}

我不知道出了什么问题。

正如我所看到的,您认为__construct的返回值是某种字符串,是调用函数的结果。

不是

new ClassName的调用返回ClassName类的对象。您应该显式地调用某个函数来获取html字符串。或者使用__toString魔术方法。

如果要打印整个对象:var_dump($res);

如果要将整个对象打印到一个变量中:print_r($res, 1);

如果您希望对象返回字符串:

您可以使用invokemagic方法。在你的课堂上添加

function __invoke() {
    //put the stuff from your constructor in here
    return "your expected response";
}

然后你引用类的位置:

$res = new indexPageClass();
echo $res();

您的类需要一个__toString()函数来告诉它在字符串上下文中使用什么。

http://www.tuxradar.com/practicalphp/6/14/5

添加到类的下一个代码

public function __toString() {
  return $this->Header_TopBar_Content_lsti_();
}

这就是你想要的吗?

类似PS的

class indexPageClass {
public function _construct() {
              $TopBar= $this->Header_TopBar_Content_lsti_();
return $TopBar;
 } 
private function Header_TopBar_Content_lsti_() {
$str=<<<EOF
<ul>
<li>
    <i class="fa fa-globe"></i>
    <a>Languages</a>
    <ul class="lenguages">
        <li class="active">
            <a href="#">English <i class="fa fa-check"></i></a> 
        </li>
        <li><a href="#">Spanish</a></li>
    </ul>
</li>
<li class="topbar-devider"></li>                       
<li><a data-toggle="modal" data-target="#responsive">Login</a></li>  
</ul>
EOF;
return $str;  
 } 
    public function __toString() {
      return $this->Header_TopBar_Content_lsti_();
    }
}