PHP面向对象程序设计__tostring()和__invoke()用法分析


Posted in PHP onJune 12, 2019

本文实例讲述了PHP面向对象程序设计__tostring()和__invoke()用法。分享给大家供大家参考,具体如下:

__tostring()魔术方法

将一个对象当做一个字符串来使用时,会自动调用该方法,并且在该方法中,可以返回一定的字符串,以表明该对象转换为字符串之后的结果。该魔术方法比较常用。

注意:如果没有定义该方法,则对象无法当做字符串来使用!

类里面未定义__tostring()方法的例子

<?php
ini_set('display_errors', 1);
class A{
  public $name;
  public $age;
  public $sex;
  function __construct($name, $age, $sex){
    $this->name = $name;
    $this->age = $age;
    $this->sex = $sex;
  }
}
$obj1 = new A('张三', 15, '男');
echo $obj1;  //echo 后面为字符串,而对象不是字符串,会报错
$v1 = "abc" . $obj1; //.为字符串连接符,会报错
$v2 = "abx" + $obj1; //+为加法运算符,会报错
?>

3个报错内容分别为

Catchable fatal error: Object of class A could not be converted to string
Catchable fatal error: Object of class A could not be converted to string
Notice: Object of class A could not be converted to int

类里面定义__tostring()方法

<?php
ini_set('display_errors', 1);
class A{
  public $name;
  public $age;
  public $sex;
  function __construct($name, $age, $sex){
    $this->name = $name;
    $this->age = $age;
    $this->sex = $sex;
  }
  function __tostring(){
    $str = "姓名:" . $this->name;
    $str .= "年龄:" . $this->age;
    $str .= ",性别:" . $this->sex;
    return $str;  //这里可以返回“任何字符串内容”
  }
}
$obj1 = new A('张三', 15, '男');
echo $obj1;  //调用__tostring(),不会报错
?>

运行结果

姓名:张三年龄:15,性别:男

__invoke()魔术方法

将对象当作函数来使用时,会自动调用该方法。通常不推荐这么做。

class A{
  function __invoke(){
    echo "<br />我是一个对象呀,你别把我当作一个函数来调用啊!";
  }
}
$obj = new A();
$obj();  //此时就会调用类中的方法:__invoke()

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
几种显示数据的方法的比较
Oct 09 PHP
使用apache模块rewrite_module (转)
Feb 14 PHP
PHP中数组的三种排序方法分享
May 07 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
php数组添加元素方法小结
Dec 20 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
如何用PHP来实现一个动态Web服务器
Jul 29 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
PHP实现清除MySQL死连接的方法
Jul 23 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
PHP 对接美团大众点评团购券(门票)的开发步骤
Apr 03 PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 #PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 #PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 #PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 #PHP
php使用scandir()函数扫描指定目录下所有文件示例
Jun 08 #PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 #PHP
php中字符串和整数比较的操作方法
Jun 06 #PHP
You might like
php 应用程序安全防范技术研究
2009/09/25 PHP
PHP笔记之:基于面向对象设计的详解
2013/05/14 PHP
修改destoon会员公司的伪静态中的com目录的方法
2014/08/21 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
php实现多站点共用session实现单点登录的方法详解
2019/09/18 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
jquery操作select option 的代码小结
2011/06/21 Javascript
Firefox中通过JavaScript复制数据到剪贴板(Copy to Clipboard 跨浏览器版)
2013/11/22 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
超赞的动手创建JavaScript框架的详细教程
2015/06/30 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
清除浏览器缓存的几种方法总结(必看)
2016/12/09 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
深入理解在JS中通过四种设置事件处理程序的方法
2017/03/02 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
vue.js实现左边导航切换右边内容
2019/10/21 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python+Django+apache的配置方法详解
2016/06/01 Python
json跨域调用python的方法详解
2017/01/11 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
美国咖啡批发网站:Coffee.org
2017/06/29 全球购物
Spotahome意大利:公寓和房间出租
2020/02/21 全球购物
擅自离岗检讨书
2014/02/11 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
学校社会实践活动总结
2014/07/03 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书