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学习之变量的使用
May 29 PHP
php include和require的区别深入解析
Jun 17 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
php提交表单发送邮件的方法
Mar 20 PHP
迪菲-赫尔曼密钥交换(Diffie?Hellman)算法原理和PHP实现版
May 12 PHP
yii2实现根据时间搜索的方法
May 25 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 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
第十三节 对象串行化 [13]
2006/10/09 PHP
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
2016/11/07 PHP
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
让浏览器DOM元素最后加载的js方法
2014/07/29 Javascript
一款基jquery超炫的动画导航菜单可响应单击事件
2014/11/02 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
js 基础篇必看(点击事件轮播图的简单实现)
2016/08/20 Javascript
Vue的Flux框架之Vuex状态管理器
2017/07/30 Javascript
基于jQuery中ajax的相关方法汇总(必看篇)
2017/11/08 jQuery
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
2013/01/17 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python滑块验证码的破解实现
2019/11/10 Python
Python numpy数组转置与轴变换
2019/11/15 Python
django正续或者倒序查库实例
2020/05/19 Python
python matplotlib库的基本使用
2020/09/23 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
机电一体化专业推荐信
2013/12/03 职场文书
会计岗位描述
2014/02/22 职场文书
学生安全责任书
2014/04/15 职场文书
国际商务专业毕业生自我鉴定2014
2014/09/27 职场文书
世界文化遗产导游词
2015/02/13 职场文书
查看nginx配置文件路径和资源文件路径的方法
2021/03/31 Servers