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 相关文章推荐
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
批量修改RAR文件注释的php代码
Nov 20 PHP
PHP 文件系统详解
Sep 13 PHP
显示程序执行时间php函数代码
Aug 29 PHP
PHP抓取、分析国内视频网站的视频信息工具类
Apr 02 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
PHP统计目录中文件以及目录中目录大小的方法
Jan 09 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
PHP中quotemeta()函数的用法讲解
Apr 04 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
PHP单元测试配置与使用方法详解
Dec 27 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学习笔记之三 数据库基本操作
2011/01/17 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
PHP、Java des加密解密实例
2015/04/27 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
Javascript 表单之间的数据传递代码
2008/12/04 Javascript
js一组验证函数
2008/12/20 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
利用毫秒减值计算时长的js代码
2013/09/22 Javascript
聊一聊Vue.js过渡效果
2016/09/07 Javascript
BootStrap CSS全局样式和表格样式源码解析
2017/01/20 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
JavaScript正则表达式函数总结(常用)
2018/02/22 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
微信小程序如何加载数据库真实数据的实现
2020/03/04 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
Python求导数的方法
2015/05/09 Python
python通过加号运算符操作列表的方法
2015/07/28 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
CentOS 7 安装python3.7.1的方法及注意事项
2018/11/01 Python
python3利用ctypes传入一个字符串类型的列表方法
2019/02/12 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
Python字典的概念及常见应用实例详解
2019/10/30 Python
python爬虫开发之selenium模块详细使用方法与实例全解
2020/03/09 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
Python3获取cookie常用三种方案
2020/10/05 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
几个数据库方面的面试题
2016/07/01 面试题
小学德育工作经验交流材料
2014/05/22 职场文书
高一英语教学反思
2016/03/03 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
Python中Selenium对Cookie的操作方法
2021/07/09 Python