Object之魔术函数__toString() 直接输出对象引用时自动调用

__toString()是快速获取对象的字符串信息的便捷方式

  在直接输出对象引用时自动调用的方法。

__toString()的作用

当我们调试程序时,需要知道是否得出正确的数据。比如打印一个对象时,看看这个对象都有哪些属性,其值是什么,如果类定义了toString方法,就能在测试时,echo打印对象体,对象就会自动调用它所属类定义的toString方法,格式化输出这个对象所包含的数据。

下面我们来看一个__toString()的实例

<?php
class Person{
     private $name = "";
     function __construct($name = ""){
                   $this->name = $name;
      }
     function say(){
             echo "Hello,".$this->name."!<br/>";  

     }
    function __tostring(){//在类中定义一个__toString方法
               return  "Hello,".$this->name."!<br/>";
    }

}

$WBlog = new Person(‘WBlog‘);
echo $WBlog;//直接输出对象引用则自动调用了对象中的__toString()方法
$WBlog->say();//试比较一下和上面的自动调用有什么不同
?>

  

程序输出:

Hello,WBlog!

Hello,WBlog!

如果不定义“__tostring()”方法会怎么样呢?例如在上面代码的基础上,把“ __tostring()”方法屏蔽掉,再看一下程序输出结果:

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

由此可知如果在类中没有定义“__tostring()”方法,则直接输出以象的引用时就会产生误法错误,另外__tostring()方法体中需要有一个返回值。

时间: 2024-08-29 12:13:44

Object之魔术函数__toString() 直接输出对象引用时自动调用的相关文章

Object之魔术函数__call() 处理错误调用

在提到__call之前,先来看一个实例的测试结果,以便更好地去了解__call方法的作用.上代码: <?php class Person{ function say(){ echo "Hello, wblog!<br>"; } } $Person=new Person(); $Person->run("teacher"); //调用对象中不存在的方法run $Person->eat("child", "ap

PHP魔术函数、魔术常量、预定义常量

一.魔术函数(13个) 1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一个对象或对象操作终止时被调用. 3.__call() 对象调用某个方法, 若方法存在,则直接调用:若不存在,则会去调用__call函数. 4.__get() 读取一个对象的属性时,若属性存在,则直接返回属性值: 若不存在,则会调用__get函数. 5.__set() 设置一个

PHP_007 魔术变量和魔术函数

魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例: <?php echo '这是第 " '  . __LINE__ . ' " 行'; ?> 以上实

PHP 魔术变量和魔术函数

魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例: 复制代码 代码如下: <?php echo '这是第 " '  . __LINE__ . ' " 行'

PHP 魔术变量和魔术函数详解

魔术变量 PHP 向它运行的任何脚本提供了大量的预定义常量. 不过很多常量都是由不同的扩展库定义的,只有在加载了这些扩展库时才会出现,或者动态加载后,或者在编译时已经包括进去了. 有八个魔术常量它们的值随着它们在代码中的位置改变而改变. 例如 __LINE__ 的值就依赖于它在脚本中所处的行来决定.这些特殊的常量不区分大小写,如下: __LINE__ 文件中的当前行号. 实例: <?php echo '这是第 “ ' . __LINE__ . ' ” 行'; ?> 以上实例输出结果为: 这是第

序列化魔术函数__sleep()和反序列化魔术函数__wakeup()

1.string serialize ( mixed $value )— 产生一个可存储的值的表示 serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方. 这有利于存储或传递 PHP 的值,同时不丢失其类型和结构 想要将已序列化的字符串变回 PHP 的值,可使用 unserialize() @ 序列化数组 serialize($arr); 在设置cookie的时候可以通过序列化数组的形式传递多个值,然后在接收页面进行反序列化读取 @ 序列化对象 cla

详解PHP魔术函数、魔术常量、预定义常量

一.魔术函数(13个) 1.__construct() 实例化对象时被调用, 当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用. 2.__destruct() 当删除一个对象或对象操作终止时被调用. 3.__call() 对象调用某个方法, 若方法存在,则直接调用:若不存在,则会去调用__call函数. 4.__get() 读取一个对象的属性时,若属性存在,则直接返回属性值: 若不存在,则会调用__get函数. 5.__set() 设置一个

PHP超级全局变量、魔术变量和魔术函数

PHP在设计的时候已经预定义了9个超级全局变量.8个魔术变量和13魔术函数,这些变量和函数可以在脚本的任何地方不用声明就可以使用. 在PHP开发会频繁的使用这些变量和函数,这些变量和函数可以方便的帮我们解决很多问题.下面详细的讲解下PHP中的超级全局变量.魔术变量和魔术函数. PHP超级全局变量(9个) $GLOBALS 储存全局作用域中的变量 $_SERVER 获取服务器相关信息 $_REQUEST 获取POST和GET请求的参数 $_POST 获取表单的POST请求参数 $_GET 获取表单

php类知识---魔术方法__toString,__call,__debugInfo

<?php class mycoach{ public function __construct($name,$age) { $this->name = $name; $this->age = $age; echo "upon melancholy hill"."\n"; } public function __toString() { #echo时触发,返回一个字符串 return "working hard and party wit