萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php面向對象__toString() 用法詳解

php面向對象__toString() 用法詳解

本文章來給各位同學介紹一下關於php面向對象__toString() 用法詳解,, __toString() 方法是自動被調用的,是在直接輸出對象引用時自動調用的


我們前面說過在類裡面聲明“--”開始的方法名的方法(PHP給我們提供的),都是在某一時刻不同情況下自動調用執行的方法,“__toString()”方法也是一樣自動被調用的,是在直接輸出對象引用時自動調用的, 前面我們講過對象引用是一個指針,比如說:“$p=new Person()“中,$p就是一個引用,我們不能使用echo 直接輸出$p, 這樣會輸出”Catchable fatal error: Object of class Person could not be converted to string“這樣的錯誤,如果你在類裡面定義了“__toString()”方法,在直接輸出對象引用的時候,就不會產生錯誤,而是自動調用了”__toString()”方法, 輸出“__toString()”方法中返回的字符,所以“__toString()”方法一定要有個返回值(return 語句).

代碼

 代碼如下 復制代碼

<?php
    // Declare a simple class
    class TestClass
    {
        public $foo;

        public function __construct($foo) {
        $this->foo = $foo;
        }
       //定義一個__toString方法,返加一個成員屬性$foo
        public function __toString() {
        return $this->foo;
        }
    }

    $class = new TestClass('Hello');

    //直接輸出對象
    echo $class;
?>

似曾相識,在php面向對象編程之魔術方法__set,曾經介紹了什麼是魔術方法,這一章又介紹一個魔術方法__tostring()。


__toString()是快速獲取對象的字符串信息的便捷方式,似乎魔術方法都有一個“自動“的特性,如自動獲取,自動打印等,__toString()也不例外,它是在直接輸出對象引用時自動調用的方法。


__toString()的作用

當我們調試程序時,需要知道是否得出正確的數據。比如打印一個對象時,看看這個對象都有哪些屬性,其值是什麼,如果類定義了toString方法,就能在測試時,echo打印對象體,對象就會自動調用它所屬類定義的toString方法,格式化輸出這個對象所包含的數據。

下面我們來看一個__toString()的實例

 

 代碼如下 復制代碼

<?php 

02 class Person{ 

03     private $name = ""; 

04     function __construct($name = ""){ 

05                    

06         $this->name = $name; 

07     } 

08     function say(){ 

09                    

10         echo "Hello,".$this->name."!<br/>";   

11     } 

12     function __tostring(){//在類中定義一個__toString方法 

13         return  "Hello,".$this->name."!<br/>";     

14     } 

15 } 

16 $WBlog = new Person('WBlog'); 

17 echo $WBlog;//直接輸出對象引用則自動調用了對象中的__toString()方法 

18 $WBlog->say();//試比較一下和上面的自動調用有什麼不同 

19 ?>


程序輸出:

Hello,WBlog!

Hello,WBlog!


如果不定義“__tostring()”方法會怎麼樣呢?例如在上面代碼的基礎上,把“ __tostring()”方法屏蔽掉,再看一下程序輸出結果:


Catchable fatal error: Object of class Person could not be converted to string


由此可知如果在類中沒有定義“__tostring()”方法,則直接輸出以象的引用時就會產生誤法錯誤,另外__tostring()方法體中需要有一個返回值。

copyright © 萬盛學電腦網 all rights reserved