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 相关文章推荐
汉字转化为拼音(php版)
Oct 09 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 PHP
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
Jun 05 PHP
php实现水仙花数示例分享
Apr 03 PHP
ThinkPHP3.1新特性之G方法的使用
Jun 19 PHP
php实现webservice实例
Nov 06 PHP
PHP访问Google Search API的方法
Mar 05 PHP
PHP程序中使用adodb连接不同数据库的代码实例
Dec 19 PHP
PHP6新特性分析
Mar 03 PHP
PHP 数组遍历foreach语法结构及实例
Jun 13 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
php strftime函数获取日期时间(switch用法)
May 16 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实现自动获取生成文章主题关键词功能的深入分析
2013/06/03 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
PHP模板解析类实例
2015/07/09 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&amp;Firefox] 有文档和例子
2007/05/30 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
jQuery live
2009/05/15 Javascript
JS实现拖动示例代码
2013/11/01 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
微信小程序 实现列表项滑动显示删除按钮的功能
2017/04/13 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python实现的计算马氏距离算法示例
2018/04/03 Python
numpy中的delete删除数组整行和整列的实例
2018/05/09 Python
Python交互环境下实现输入代码
2018/06/22 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
Python 解析简单的XML数据
2020/07/24 Python
html5 canvas简单封装一个echarts实现不了的饼图
2018/06/12 HTML / CSS
html5唤醒APP小记
2019/03/27 HTML / CSS
印尼旅游网站:via
2017/11/12 全球购物
韩国现代百货官网:Hmall
2018/03/21 全球购物
2015教师年度工作总结范文
2015/04/07 职场文书
创业计划之特色精品店
2019/08/12 职场文书
导游词之秦皇岛燕塞湖
2020/01/03 职场文书
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL