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 has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
8个出色的WordPress SEO插件收集
Feb 26 PHP
php微信公众平台开发类实例
Apr 01 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
Jun 17 PHP
PHP语法小结之基础和变量
Nov 22 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
PHP实现ASCII码与字符串相互转换的方法
Apr 29 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 PHP
yii2 在控制器中验证请求参数的使用方法
Jun 19 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 PHP
php解析非标准json、非规范json的方式实例
May 10 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面向对象法则
2012/02/23 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
laravel实现查询最后执行的一条sql语句的方法
2019/10/09 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
JavaScript中split() 使用方法汇总
2015/04/17 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
jquery实现九宫格大转盘抽奖
2015/11/13 Javascript
JavaScript设计模式开发中组合模式的使用教程
2016/05/18 Javascript
jquery css实现邮箱自动补全
2016/11/14 Javascript
基于JavaScript实现带缩略图的轮播效果
2017/01/12 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
2017/01/18 Javascript
Angular使用$http.jsonp发送跨站请求的方法
2017/03/16 Javascript
vuex操作state对象的实例代码
2018/04/25 Javascript
JS高级技巧(简洁版)
2018/07/29 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[07:20]2014DOTA2西雅图国际邀请赛 选手讲解积分赛第二天
2014/07/11 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
在Python中使用成员运算符的示例
2015/05/13 Python
Python检测生僻字的实现方法
2016/10/23 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
如何基于python操作json文件获取内容
2019/12/24 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
竞选演讲稿范文
2013/12/28 职场文书
社区端午节活动方案
2014/01/28 职场文书
司机检讨书
2014/02/13 职场文书
竞选班干部演讲稿400字
2014/08/20 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP