在__toString()之后没有代码在php中工作

时间:2016-09-22 11:54:09

标签: php

在__toString()之后的代码中,php代码无法正常工作?

{{1}}

浏览器输出如下:
姓名:鲍勃 卷号:1

其余的线路不工作;

2 个答案:

答案 0 :(得分:0)

方法 __ toString 应该返回String而不是调用输出函数。在您的代码中,您执行了类似 echo echo 的操作,因为在方法显示内部会再次调用echo。将 __ toString 更改为:

return  $this->display();

显示方法:

return "Name :".$this->name."<br> Roll No :".$this->roll_no."<br><br>";

此解决方案可修复您的错误,但您应将显示方法名称更改为与其当前行为更匹配的内容,如getString()。

查看命名转换(显示方法名称)最符合逻辑的方法是:

class Student{

private $name;
private $roll_no;

function __construct($name,$roll_no){
    $this->name = $name;
    $this->roll_no = $roll_no;
}

public function display(){
    echo $this; //conversion to string and echo
}


function __toString(){
    return "Name :".$this->name."<br> Roll No :".$this->roll_no."<br><br>";
}

}

所以我在 __ toString 中使用显示方法转换为String。目前的用法是:

$std1=new Student("Bob" , 1);
$std1.display();
//or the same:
echo $std1; //the same thing like $std1.display();

答案 1 :(得分:0)

试试这个

class Student{

private $name;
private $roll_no;

function __construct($name,$roll_no){
    $this->name = $name;
    $this->roll_no = $roll_no;
}

public function display(){
    return "Name :".$this->name."<br> Roll No :".$this->roll_no."<br><br>";
}


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

}

$std1 = new Student("Bob" , 1);
echo $std1;
$std2 = new Student("John" , 2);
echo $std2;
$std3 = new Student("Tony" , 3);
echo $std3;
$std4 = new Student("Teena" , 4);
echo $std4;