我有一个有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>";
}
答案 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;