聽說是自動引用,不解其意,誰能舉個栗子啊。
比如這個,它寫這一大堆玩意,目的是啥尼
回複討論(解決方案)
__toString 方法可以讓一個類決定它如何轉換成一個字串。
你給的__toString 目的是為了返回一個form表單的字串
就是當你把包含__toString() 函數的類的對象當做字串使用的時候返回的值。
php手冊有個例子你看看,運行一下就知道了。。
http://www.php.net/manual/zh/language.oop5.magic.php#object.tostring
如果我有一個類:
class Person
{
private $name = "";
private $age = 0;
function __construct($name = "", $age = "")
{
$this->name = $name;
$this->age = $age;
}
function say()
{
echo "name:".$this->name."
"."age:".$this->age."
";
}
}
現在我去執行個體化這個類,然後去列印這個執行個體:
$p1 = new person("liuzy",20);
echo $p1; //直接列印會出錯
顯然這樣直接列印對象是會出現錯誤的,因為對象是引用控制代碼,不能直接列印。這時,我們可以用到__toString()方法。我們在Person類裡加一個__toString()方法:
function __toString()
{
return "I am Person,my name is ".$this->name."
";
}
然後再重新整理頁面,發現什麼了?
現在我們明白,__toString()是在直接列印對象時執行的方法,我們可以用該方法列印類的一些相關資訊。注意:是兩個底線,方法必須有傳回值。
PHP 5.2.0 起,如果將一個未定義 __toString() 方法的對象轉換為字串,會產生 E_RECOVERABLE_ERROR 層級的錯誤。
如果我有一個類:
class Person
{
private $name = "";
private $age = 0;
function __construct($name = "", $age = "")
{
$this->name = $name;
$this->age = $age;
}
function say()
{
echo "name:".$this->name."
"."age:".$this->age."
";
}
}
現在我去執行個體化這個類,然後去列印這個執行個體:
$p1 = new person("liuzy",20);
echo $p1; //直接列印會出錯
顯然這樣直接列印對象是會出現錯誤的,因為對象是引用控制代碼,不能直接列印。這時,我們可以用到__toString()方法。我們在Person類裡加一個__toString()方法:
function __toString()
{
return "I am Person,my name is ".$this->name."
";
}
然後再重新整理頁面,發現什麼了?
現在我們明白,__toString()是在直接列印對象時執行的方法,我們可以用該方法列印類的一些相關資訊。注意:是兩個底線,方法必須有傳回值。
你這是說的啥:因為對象是引用控制代碼,不能直接列印,啥是控制代碼,而且還什麼引用,亂七八糟的啊。越來越暈,你不說還好點。
如果我有一個類:
class Person
{
private $name = "";
private $age = 0;
function __construct($name = "", $age = "")
{
$this->name = $name;
$this->age = $age;
}
function say()
{
echo "name:".$this->name."
"."age:".$this->age."
";
}
}
現在我去執行個體化這個類,然後去列印這個執行個體:
$p1 = new person("liuzy",20);
echo $p1; //直接列印會出錯
顯然這樣直接列印對象是會出現錯誤的,因為對象是引用控制代碼,不能直接列印。這時,我們可以用到__toString()方法。我們在Person類裡加一個__toString()方法:
function __toString()
{
return "I am Person,my name is ".$this->name."
";
}
然後再重新整理頁面,發現什麼了?
現在我們明白,__toString()是在直接列印對象時執行的方法,我們可以用該方法列印類的一些相關資訊。注意:是兩個底線,方法必須有傳回值。
你這是說的啥:因為對象是引用控制代碼,不能直接列印,啥是控制代碼,而且還什麼引用,亂七八糟的啊。越來越暈,你不說還好點。
基礎東西,你完全可以baidu
如果我有一個類:
class Person
{
private $name = "";
private $age = 0;
function __construct($name = "", $age = "")
{
$this->name = $name;
$this->age = $age;
}
function say()
{
echo "name:".$this->name."
"."age:".$this->age."
";
}
}
現在我去執行個體化這個類,然後去列印這個執行個體:
$p1 = new person("liuzy",20);
echo $p1; //直接列印會出錯
顯然這樣直接列印對象是會出現錯誤的,因為對象是引用控制代碼,不能直接列印。這時,我們可以用到__toString()方法。我們在Person類裡加一個__toString()方法:
function __toString()
{
return "I am Person,my name is ".$this->name."
";
}
然後再重新整理頁面,發現什麼了?
現在我們明白,__toString()是在直接列印對象時執行的方法,我們可以用該方法列印類的一些相關資訊。注意:是兩個底線,方法必須有傳回值。
你這是說的啥:因為對象是引用控制代碼,不能直接列印,啥是控制代碼,而且還什麼引用,亂七八糟的啊。越來越暈,你不說還好點。
其實就是指標的感覺,學過C就很容易理解了。