zoukankan      html  css  js  c++  java
  • 魔术方法__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()可以自定义样式,也可以返回指定的属性和值。

  • 相关阅读:
    SpringSecurity 3.2入门(8)自定义权限控制数据库设计
    SpringSecurity 3.2入门(7)自定义权限控制介绍
    SpringSecurity 3.2入门(6)简单介绍默认使用的十一个过滤器
    Spring3.2下使用JavaMailSenderImpl类发送邮件
    Java Mail邮件发送的简单实现
    Spring下配置几种常用连接池
    23种设计模式入门之工厂模式
    C# BackgroundWorker的Bug???
    C# BeginInvoke和EndInvoke方法
    c# 高效的线程安全队列ConcurrentQueue
  • 原文地址:https://www.cnblogs.com/daxiaohaha/p/11540913.html
Copyright © 2011-2022 走看看