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&amp;mysql(六)
Oct 09 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 PHP
php获取文件大小的方法
Feb 26 PHP
php文件缓存类汇总
Nov 21 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
PHP数组操作类实例
Jul 11 PHP
Zend Framework实现多文件上传功能实例
Mar 21 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
php经典趣味算法实例代码
Jan 21 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原生DOM对象操作XML的方法
2016/10/17 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
JavaScript类属性的访问方式详解
2014/02/11 Javascript
js与css实现弹出层覆盖整个页面的方法
2014/12/13 Javascript
this,this,再次讨论javascript中的this,超全面(经典)
2016/01/05 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
jQuery基于BootStrap样式实现无限极地区联动
2016/08/26 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
浅述节点的创建及常见功能的实现
2016/12/15 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
WebStorm ES6 语法支持设置&amp;babel使用及自动编译(详解)
2017/09/08 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
新手快速上手webpack4打包工具的使用详解
2019/01/28 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
如何理解python中数字列表
2020/05/29 Python
专科文秘应届生求职信
2013/11/18 职场文书
化妆师职业生涯规划书
2014/02/16 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
个人授权委托书模板
2014/09/14 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
2015年社区工作总结
2015/04/08 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
Html分层的box-shadow效果的示例代码
2021/03/30 HTML / CSS
react中的DOM操作实现
2021/06/30 Javascript
【DOTA2】高能暴走TK秀!PSG LGD vs ASTER - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS
win10搭建配置ftp服务器的方法
2022/08/05 Servers