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 相关文章推荐
一个数据采集类
Feb 14 PHP
PHP中str_replace函数使用小结
Oct 11 PHP
PHP抽象类 介绍
Jun 13 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
Sep 07 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
PHP类继承 extends使用介绍
Jan 14 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
yii操作session实例简介
Jul 31 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
PHP二维关联数组的遍历方式(实例讲解)
Oct 18 PHP
关于php支持的协议与封装协议总结(推荐)
Nov 17 PHP
php+iframe 实现上传文件功能示例
Mar 04 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/12 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
jquery中通过过滤器获取表单元素的实现代码
2011/07/05 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
js触发onchange事件的方法说明
2014/03/08 Javascript
javascript实现存储hmtl字符串示例
2014/04/25 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
Node.js环境下Koa2添加travis ci持续集成工具的方法
2017/06/19 Javascript
一个简易的js图片轮播效果
2017/07/22 Javascript
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
详解使用VUE搭建后台管理系统(vue-cli更新至3.0)
2018/08/22 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
layui 动态设置checbox 选中状态的例子
2019/09/02 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
2018/04/02 Python
python实现linux下抓包并存库功能
2018/07/18 Python
python根据url地址下载小文件的实例
2018/12/18 Python
PyQt编程之如何在屏幕中央显示窗体的实例
2019/06/18 Python
在django中,关于session的通用设置方法
2019/08/06 Python
如何在Cloud Studio上执行Python代码?
2019/08/09 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
个人廉洁自律承诺书
2014/03/27 职场文书
节能宣传周活动总结
2014/05/08 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
个人债务授权委托书范本
2014/10/05 职场文书
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python