0

我有一个有 4 个变量的类,我想将它们单独打印为字符串。(在不同的地方打印它们)。

这是该类的一部分:(如您所见,我使用 __tostring 方法仅返回一个变量,但我想将其用于所有变量。)

class dash
{
public $name;
public $msg;
public $msg_date;
public $votes;

function __construct($name,$msg,$msg_date,$votes){
$this->name=$name;
$this->msg=$msg;
$this->msg_date=$msg_date;
$this->votes=$votes;}

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

我必须在这里打印它:

function repliesView(){
$arr=objectsToArr();
$count=count($arr)-1;
for($i=0;$i<=$count;$count--){
echo "<p>name:$arr[$count]->name<br />"; 
echo "msg:$arr[$count]->msg<br />";
echo "date:arr[$count]->msg_date</p>";
}
4

4 回答 4

1

__toString应该将整个对象表示为字符串。

OOP而言,您应该简单地为每个字段设置一个 get 方法,以便轻松检索它们。最终您可以使用__toString来检索最常见的字段,以节省一些代码(仍然不是一个很好的做法)。

于 2013-03-29T16:11:04.507 回答
0

您可能可以编写一个执行此操作但不使用__toString. __toString是一个特殊的功能,你不应该真的用它来做任何对应用程序至关重要的事情。使用它进行调试和检查。


function toHTML() {
    return "<p>" . htmlentities($this->name) . "<br />"
      . "msg: " . htmlentities($this->msg) . "<br />"
      . "date: " . htmlentities($this->msg_date) . "</p>";
}

然后:

function repliesView() {
    $arr = objectsToArr();
    $count = count($arr)-1;
    for ($i = 0; $i <= $count; $count--) {
        echo $arr[$count]->toHTML();
    }
}
于 2013-03-29T16:08:19.940 回答
0

__toString()方法在这里不会有太大帮助,但您始终可以执行以下操作:

class dash
{
    public $name;
    public $msg;
    public $msg_date;
    public $votes;
    function __construct($name, $msg, $msg_date, $votes) {
        $this->name = $name;
        $this->msg = $msg;
        $this->msg_date = $msg_date;
        $this->votes = $votes;
    }
    public function getName() {
        return($this->name);
    }
    public function getMsg() {
        return($this->msg);
    }
    public function getMsgDate() {
        return($this->msg_date);
    }
    public function getVotes() {
        return($this->votes);
    }
}

然后在初始化类后调用方法:

$dash = new dash("John Doe", "Message text", "12/4/13", 4);
echo($dash->getName());
// Which would return John Doe
于 2013-03-29T16:14:14.450 回答
0

我认为你混淆了什么__toString()__toString()当您尝试将对象用作字符串时执行。

例如:

class Dash {
    public function __tostring() { return 'Hello'; }
}

$obj = new Dash();
echo (string) $obj;

>> Hello

如果您希望能够访问对象中的私有/受保护成员变量,请使用__get().

例如:

class Dash {
    protected $var1, $var2;
    public function __get($k) { 
        if ($k === 'var1' || $k === 'var2') {
            return (string) $this->$k; 
        }
    }
}

$obj = new Dash();
echo $obj->var1;
echo $obj->var2;
于 2013-03-29T16:44:47.340 回答