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 什么是PEAR?(第二篇)
Mar 19 PHP
php 字符串替换的方法
Jan 10 PHP
php操作csv文件代码实例汇总
Sep 22 PHP
PHP实现抓取HTTPS内容
Dec 01 PHP
实现PHP+Mysql无限分类的方法汇总
Mar 02 PHP
php计算到指定日期还有多少天的方法
Apr 14 PHP
PHP使用递归方式列出当前目录下所有文件的方法
Jun 02 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP定时任务获取微信access_token的方法
Oct 10 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
php的命名空间与自动加载实现方法
Aug 25 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/10/09 PHP
用PHP实现Ftp用户的在线管理
2012/02/16 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
ExtJs事件机制基本代码模型和流程解析
2010/10/24 Javascript
用javascript模仿ie的自动完成类似自动完成功的表单
2012/12/12 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
js获取客户端网卡的IP地址、MAC地址
2014/03/26 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
分享一些常用的jQuery动画事件和动画函数
2015/11/27 Javascript
Bootstrap所支持的表单控件实例详解
2016/05/16 Javascript
json定义及jquery操作json的方法
2016/10/03 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
JavaScript数组常用的增删改查与其他属性详解
2020/10/13 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[04:55]完美世界副总裁蔡玮:DOTA2的自由、公平与信任
2013/12/18 DOTA
将图片文件嵌入到wxpython代码中的实现方法
2014/08/11 Python
Python判断变量是否已经定义的方法
2014/08/18 Python
连接Python程序与MySQL的教程
2015/04/29 Python
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python学习之用pygal画世界地图实例
2017/12/07 Python
Python 中的 import 机制之实现远程导入模块
2019/10/29 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
python 自动识别并连接串口的实现
2021/01/19 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
旅游管理专业个人求职信范文
2013/12/24 职场文书
浪费资源的建议书
2014/03/12 职场文书
文明班级建设方案
2014/05/15 职场文书
暑假生活随笔
2015/08/15 职场文书
python如何做代码性能分析
2021/04/26 Python
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python