是否可以使用__toString魔术方法返回几个变量?

时间:2013-03-29 16:06:33

标签: php class

我有一个有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 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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();
    }
}

答案 2 :(得分: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

答案 3 :(得分: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;