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 相关文章推荐
用header 发送cookie的php代码
Mar 16 PHP
php运行出现Call to undefined function curl_init()的解决方法
Nov 02 PHP
UCenter 批量添加用户的php代码
Jul 17 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
PHP设计模式之代理模式的深入解析
Jun 13 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
Smarty模板学习笔记之Smarty简介
May 20 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
Mar 19 PHP
php简单实现查询数据库返回json数据
Apr 16 PHP
php数组指针操作详解
Feb 14 PHP
PHP实现的Redis多库选择功能单例类
Jul 27 PHP
php支付宝系列之电脑网站支付
May 30 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
Session的工作方式
2006/10/09 PHP
PHP使用redis实现统计缓存mysql压力的方法
2015/11/14 PHP
前端开发部分总结[兼容性、DOM操作、跨域等](持续更新)
2010/03/04 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
jQuery 实现ajax传入参数含有特殊字符的方法总结
2016/10/17 Javascript
详解nodejs 文本操作模块-fs模块(三)
2016/12/22 NodeJs
微信小程序(六):列表上拉加载下拉刷新示例
2017/01/13 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
vue仿淘宝订单状态的tab切换效果
2020/06/23 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
jQuery实现每日秒杀商品倒计时功能
2019/09/06 jQuery
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
vue flex 布局实现div均分自动换行的示例代码
2020/08/05 Javascript
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
基于wxpython实现的windows GUI程序实例
2015/05/30 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
Python队列RabbitMQ 使用方法实例记录
2019/08/05 Python
pycharm快捷键汇总
2020/02/14 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
PyCharm上安装Package的实现(以pandas为例)
2020/09/18 Python
python中字典增加和删除使用方法
2020/09/30 Python
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
优秀求职信
2014/05/29 职场文书
个人委托函范文
2015/01/29 职场文书
被告答辩状范文
2015/05/22 职场文书
钢琴师观后感
2015/06/12 职场文书
2015初中生物教研组工作总结
2015/07/21 职场文书
2015年城管执法工作总结
2015/07/23 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python