• 魔术方法__toString()和__debugInfo()详解


    我们在测试时,需要知道是否得到正确的数据,比如打印一个对象时,看看这个对象有哪些属性和值,如果再类中定义了__toString()方法,就能在测试时echo这个对象体,对象就会自动调用它所属类定义的__tostring()方法,格式化输出这个对象所包含的数据。如果没有这个方法,那么echo一个对象将报语法错误。
    没有__toString()方法的类,在测试时,echo这个对象体会报错:

    class User
    {
        public $name = '大笑哈哈';
    }
    $user = new User;
    //会报语法错误
    echo $user;// Recoverable fatal error: Object of class User could not be converted to string in D:AppServwwwjsphp	ostring.php on line 14
    
    

    __toString()

    下面来声明一个有__toString()的User对象。

    class User
    {
        public $name = '大笑哈哈';
        public function __toString()
        {
            return "我的名字是:{$this->name}";
        }
    }
    $user = new User; 
    echo $user;  //我的名字是:大笑哈哈
    
    

    通过以上两种代码来总结一下:

    1. 不使用__toString()方法,echo对象体会报语法错误。
    2. 使用__toString()方法,可以echo 对象体。并自定义要输出的样式,及属性。
    3. _toString方法必须是return返回。

    __debugInfo()

    和__tostring()方法一样,由var_dump()、print_r()打印对象体的时候,控制对象体要输出的属性和值;
    实例代码:

    class User
    {
        public $name = '大笑哈哈';
        public function __debugInfo()
        {
            //使用数组来返回需要打印的属性和值;
            return [];
        }
    }
    $user = new User;
    var_dump($user); //User Object ( )
    

    __debugInfo方法通过自定义数组来返回需要打印的属性和值,如果不使用该魔术方法,则默认返回所有的属性和值。

    总结:
    在测试时,可以使用echovar_dump()print_r()来查看对象的属性和值,** 不能直接echo ,需要在类中添加__toString()方法才能使用echo,否则会报语法错误 **。也可以使用__debugInfo()方法来指定需要返回的属性和值。__toString()__debugInfo()可以自定义样式,也可以返回指定的属性和值。

  • 相关阅读:
    动态规划5-多重背包
    动态规划4-完全背包
    利用dwebsocket在Django中使用Websocket
    Java学习笔记之:Spring MVC 环境搭建
    Struts2 国际化
    Java学习笔记之:Struts2.0 环境搭建
    LoadRunner:VuGen开发脚本步骤(二)
    LoadRunner:VuGen开发脚本步骤(一)
    Java学习笔记之:Java Servlet 过滤器配置
    Java学习笔记之:Java Servlet环境配置
  • 原文地址:https://www.cnblogs.com/daxiaohaha/p/11540913.html
Copyright © 2020-2023  润新知