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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(3)
Oct 09 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
在WINDOWS中设置计划任务执行PHP文件的方法
Dec 19 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
Dec 18 PHP
laravel Validator ajax返回错误信息的方法
Sep 29 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 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学习 函数 课件
2008/06/15 PHP
PHP结合JQueryJcrop实现图片裁切实例详解
2014/07/24 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
jquery表单验证框架提供的身份证验证方法(示例代码)
2013/12/27 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
浅谈jQuery事件绑定原理
2015/01/02 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
探讨JavaScript标签位置的存放与功能有无关系
2016/01/15 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
微信小程序 http请求的session管理
2017/06/07 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
python用于url解码和中文解析的小脚本(python url decoder)
2013/08/11 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
Python3实现的简单验证码识别功能示例
2018/05/02 Python
PyQt5笔记之弹出窗口大全
2019/06/20 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
python日志模块logbook使用方法
2019/09/19 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
通过自学python能找到工作吗
2020/06/21 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
python的flask框架难学吗
2020/07/31 Python
50岁生日感言
2014/01/23 职场文书
幼儿教师演讲稿
2014/05/06 职场文书
暑期培训班招生方案
2014/08/26 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
员工离职感谢信
2015/01/22 职场文书
幼儿园教师管理制度
2015/08/05 职场文书
高一作文之暖冬
2019/11/09 职场文书
HTML5基础学习之文本标签控制
2022/03/25 HTML / CSS