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 相关文章推荐
人大复印资料处理程序_查询篇
Oct 09 PHP
获取远程文件大小的php函数
Jan 11 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
php使用sql数据库 获取字段问题介绍
Aug 12 PHP
php使用ZipArchive提示Fatal error: Class ZipArchive not found in的解决方法
Nov 04 PHP
php字符串函数学习之substr()
Mar 27 PHP
基于php的微信公众平台开发入门实例
Apr 15 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
Sep 19 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
PHP读取并输出XML文件数据的简单实现方法
Dec 22 PHP
yii框架使用分页的方法分析
Jul 25 PHP
laravel使用数据库测试注意事项
Apr 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限制文件下载速度的代码
2015/10/20 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
Locate a File Using a File Open Dialog Box
2007/06/18 Javascript
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
javascript this用法小结
2008/12/19 Javascript
借用Google的Javascript API Loader来加速你的网站
2009/01/28 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
python写入xml文件的方法
2015/05/08 Python
详谈Python基础之内置函数和递归
2017/06/21 Python
Python 字符串转换为整形和浮点类型的方法
2018/07/17 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
新加坡领先的时尚生活方式零售品牌:CHARLES & KEITH
2018/01/16 全球购物
Dodax奥地利:音乐、电影、书籍、玩具、电子产品等
2019/08/31 全球购物
存储过程的优缺点是什么
2015/01/10 面试题
我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
2014/03/30 面试题
社团活动策划书范文
2014/01/09 职场文书
保护环境倡议书500字
2014/05/19 职场文书
档案工作汇报材料
2014/08/21 职场文书
2015入党自荐书范文
2015/03/05 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
奶茶店的创业计划书该怎么写?
2019/07/15 职场文书
常用的Python代码调试工具总结
2021/06/23 Python
python标准库ElementTree处理xml
2022/05/20 Python