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 相关文章推荐
用PHP4访问Oracle815
Oct 09 PHP
让你的WINDOWS同时支持MYSQL4,MYSQL4.1,MYSQL5X
Dec 06 PHP
PHP的开发框架的现状和展望
Mar 16 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
php Imagick获取图片RGB颜色值
Jul 28 PHP
php+mysqli实现批量替换数据库表前缀的方法
Dec 29 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
php中如何执行linux命令详解
Nov 06 PHP
CI框架网页缓存简单用法分析
Dec 26 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
PHP7 foreach() 函数修改
Mar 09 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
深入apache host的配置详解
2013/06/09 PHP
ThinkPHP基本的增删查改操作实例教程
2014/08/22 PHP
PHP中遇到的时区问题解决方法
2015/07/23 PHP
php 解决substr()截取中文字符乱码问题
2016/07/18 PHP
iis 7下安装laravel 5.4环境的方法教程
2017/06/14 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
php定期拉取数据对比方法实例
2019/09/22 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
JAVASCRIPT函数作用域和提前声明 分享
2013/08/22 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
angularjs基础教程
2014/12/25 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
vue 2.0组件与v-model详解
2017/03/27 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
jQuery 实现左右两侧菜单添加、移除功能
2018/01/02 jQuery
vue监听键盘事件的快捷方法【推荐】
2018/07/11 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
使用JS实现动态时钟
2020/03/12 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
python线程池threadpool使用篇
2018/04/27 Python
python从子线程中获得返回值的方法
2019/01/30 Python
pyqt5 实现多窗口跳转的方法
2019/06/19 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
2020/07/09 Python
Win10下配置tensorflow-gpu的详细教程(无VS2015/2017)
2020/07/14 Python
2013年大学生的自我鉴定
2013/10/24 职场文书
会计学专业自荐信
2014/06/25 职场文书
文员求职信
2014/07/15 职场文书
临床医学专业求职信
2014/08/08 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
党员创先争优心得体会
2014/09/11 职场文书
一份没有按时交货失信于客户的检讨书
2014/09/19 职场文书
卡特教练观后感
2015/06/08 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python