toString() 方法到底起到啥作用

來源:互聯網
上載者:User
聽說是自動引用,不解其意,誰能舉個栗子啊。
比如這個,它寫這一大堆玩意,目的是啥尼


回複討論(解決方案)

__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就很容易理解了。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.