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初学者们头痛的十四个问题
Jan 15 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
Apr 11 PHP
easyui的tabs update正确用法分享
Mar 21 PHP
PHP命名空间和自动加载类
Apr 03 PHP
PHP中__autoload和Smarty冲突的简单解决方法
Apr 08 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
Jun 13 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
Nov 21 PHP
PHP中overload与override的区别
Feb 13 PHP
PHP html_entity_decode()函数讲解
Feb 25 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
php下载文件的代码示例
2012/06/29 PHP
阿里云PHP SMS短信服务验证码发送方法
2017/07/11 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
js 数组操作代码集锦
2009/04/28 Javascript
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
js取消单选按钮选中示例代码
2013/11/14 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
Vue2.0基于vue-cli+webpack Vuex的用法(实例讲解)
2017/09/15 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
2019/08/27 Javascript
node.js使用zlib模块进行数据压缩和解压操作示例
2020/02/12 Javascript
Python3中多线程编程的队列运作示例
2015/04/16 Python
Python实现基于权重的随机数2种方法
2015/04/28 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
python利用百度AI实现文字识别功能
2018/11/27 Python
使用GitHub和Python实现持续部署的方法
2019/05/09 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
HTML5制作酷炫音频播放器插件图文教程
2014/12/30 HTML / CSS
校领导推荐信
2013/11/01 职场文书
食品安全工作方案
2014/05/07 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
乡镇党的群众路线对照检查材料
2014/09/24 职场文书
学前班语言教学计划
2015/01/20 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
小平您好观后感
2015/06/09 职场文书
大学生入党自传2015
2015/06/26 职场文书
mysql 索引合并的使用
2021/08/30 MySQL
MySQL数据库索引的最左匹配原则
2021/11/20 MySQL
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers