“__toString()”是php中的一个魔术方法,在把对象转换成字符串时自动调用,用于一个类被当成字符串时应怎样回应;该方法必须返回一个字符串,否则将发出一条“E_RECOVERABLE_ERROR”级别的致命错误。
本教程操作环境:windows7系统、PHP7.1版,DELL G3电脑
__toString(),类被当成字符串时的回应方法
__toString()是php中的一个魔术方法,在把对象转换成字符串时自动调用。
在面向对象编程中,PHP 提供了一系列的魔术方法,这些魔术方法为编程提供了很多便利,在 PHP 中的作用是非常重要的。PHP 中的魔术方法通常以__(两个下划线)开始,并且不需要显式的调用而是在某种特定条件下自动调用的。
作用:
__toString() 方法用于一个类被当成字符串时应怎样回应。例如 `echo $obj;` 应该显示些什么。
注意:
此方法必须返回一个字符串,否则将发出一条 `E_RECOVERABLE_ERROR` 级别的致命错误。
警告:
不能在 __toString() 方法中抛出异常。这么做会导致致命错误。
代码:
<?php class Person { public $sex; public $name; public $age; public function __construct($name="", $age=25, $sex='男') { $this->name = $name; $this->age = $age; $this->sex = $sex; } public function __toString() { return 'go go go'; } } $person = new Person('小明'); // 初始赋值 echo $person;
结果:
go go go
那么如果类中没有 __toString() 这个魔术方法运行会发生什么呢?让我们来测试下:
代码:
<?php class Person { public $sex; public $name; public $age; public function __construct($name="", $age=25, $sex='男') { $this->name = $name; $this->age = $age; $this->sex = $sex; } } $person = new Person('小明'); // 初始赋值 echo $person;
结果:
Catchable fatal error: Object of class Person could not be converted to string in D:phpStudyWWWtestindex.php on line 18 很明显,页面报了一个致命错误,这是语法所不允许的。
扩展资料:PHP 中的魔术方法如下表所示:
魔术方法 | 作用 |
---|---|
__construct() | 实例化类时自动调用 |
__destruct() | 类对象使用结束时自动调用 |
__set() | 在给未定义的属性赋值时自动调用 |
__get() | 调用未定义的属性时自动调用 |
__isset() | 使用 isset() 或 empty() 函数时自动调用 |
__unset() | 使用 unset() 时自动调用 |
__sleep() | 使用 serialize 序列化时自动调用 |
__wakeup() | 使用 unserialize 反序列化时自动调用 |
__call() | 调用一个不存在的方法时自动调用 |
__callStatic() | 调用一个不存在的静态方法时自动调用 |
__toString() | 把对象转换成字符串时自动调用 |
__invoke() | 当尝试把对象当方法调用时自动调用 |
__set_state() | 当使用 var_export() 函数时自动调用,接受一个数组参数 |
__clone() | 当使用 clone 复制一个对象时自动调用 |
__debugInfo() | 使用 var_dump() 打印对象信息时自动调用 |
推荐学习:《PHP视频教程》