PHP有很多内置的魔术方法,这里我们聊哈tostring和involk吧。

__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('周伯通', 18, '男');
echo $obj1; //echo 后面为字符串,而对象不是字符串,会报错 $v1 = "asd" . $obj1; //.为字符串连接符,会报错
$v2 = "123" + $obj1; //+为加法运算符,会报错
?>
<br />
<b>Catchable fatal error</b>: Object of class A could not be converted to string in
<b>D:\web\mytest\vok.php</b> on line
<b></b>
<br />

3个报错内容,那么我们加入__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('周伯通', 18, '男');
echo $obj1; //调用__tostring(),不会报错 ?>
姓名:周伯通年龄:,性别:男

可以看到--tostring自动将对象转字符串了

__invoke()魔术方法

  将对象当作函数来使用时,会自动调用该方法。通常不推荐这么做。

<?php
class A{
function __invoke(){
echo "<br />函数来调用会出发这里哦!";
}
} $obj = new A();
$obj(); //此时就会调用类中的方法:__invoke()

__tostring()和__invoke()的用法的更多相关文章

  1. __tostring和__invoke 方法

    首先放上代码: <?php class MagicTest{ //__tostring会在把对象转换为string的时候自动调用 public function __tostring() { r ...

  2. PHP5中__call、__get、__set、__clone、__sleep、__wakeup的用法

    __construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__w ...

  3. 周一干不干活-PHP+MySQLi

    hi 本来是雄心壮志的要干活的,哪知天有不测,早上大阴天起不来,中午又回寝室折腾衣服(做女工啊,牛不牛)没睡午觉,这样的迷糊状态,怎么科研,写这个好了. 1.PHP的OOP编程 4.7 多态 --定义 ...

  4. [PHP] 2018年终总结

    去掉敏感信息后的不完整版 ==========================================================================2018年12月29日 记 ...

  5. PHP中文手册1

    1.入门 关于换行 PHP 会在输出时自动删除其结束符 ?>后的一个换行.该功能主要是针对在一个页面中嵌入多段 PHP 代码或者包含了无实质性输出的 PHP 文件而设计,与此同时也造成了一些疑惑 ...

  6. PHP进阶之路 -- 02 面向对象

    PHP进阶之路-- 之 “面向对象” 基础 概念 类的介绍和定义 类的属性 类常量 类的自动加载 构造函数和析构函数 访问控制 对象继承 范围解析操作符 static静态关键字 抽象类 对象接口 Tr ...

  7. PHP基础知识之魔术方法

    __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sle ...

  8. 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait

    [源码下载] 速战速决 (4) - PHP: 类基础, 抽象类, 接口, trait 作者:webabcd 介绍速战速决 之 PHP 类基础 抽象类 接口 trait 示例1.类的相关知识点 1(基础 ...

  9. 《PHP Manual》阅读笔记3 —— 类与对象

    1.PHP 中的所有函数和类都具有全局作用域,可以定义在一个函数之内而在之外调用,反之亦然. PHP 不支持函数重载,也不可能取消定义或者重定义已声明的函数. 当一个函数是有条件被定义时,必须在调用函 ...

随机推荐

  1. js 单行注释

    不可以: var a = 1;//这是注释 应当: var a = 1; //这是注释 1

  2. LeetCode编程训练 - 滑动窗口(Sliding Window)

    滑动窗口基础 滑动窗口常用来解决求字符串子串问题,借助map和计数器,其能在O(n)时间复杂度求子串问题.滑动窗口和双指针(Two pointers)有些类似,可以理解为往同一个方向走的双指针.常用滑 ...

  3. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    注:文章内容为摘录性文字,自己阅读的一些笔记,方便日后查看. 微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技 ...

  4. android studio 撤销和恢复

    我的Android studio版本是2.2版本 1.Ctrl+z是撤销快捷键 2.如果Ctrl+z 掉的内容,又反悔了,快捷键为:Ctrl + Shift + z.

  5. css3 js 做一个旋转音乐播放开关

    我们经常会看到一些旋转音乐播放开关,今天我也写了一个分享出来,大家需要的话可以参考一下: <!DOCTYPE html> <html lang="en"> ...

  6. HTTP协议概念与特点,HTTP的状态码,HTTPS是什么?

    很多人在打开网页的时候,在浏览器地址栏里都会看到http  ,在Java WEB里,HTTP也是个重点内容,今天我们就来详细了解和学习HTTP . HTTP是Hyper Text Transfer P ...

  7. Android 音视频开发(四):使用 Camera API 采集视频数据

    本文主要将的是:使用 Camera API 采集视频数据并保存到文件,分别使用 SurfaceView.TextureView 来预览 Camera 数据,取到 NV21 的数据回调. 注: 需要权限 ...

  8. Go语言反射reflect

    目录 通过反射获取类型信息 理解反射的类型(Type)与种类(Kind) reflect.Elem() - 通过反射获取指针指向的元素类型 通过反射获取结构体的成员类型 通过反射获取值信息 使用反射值 ...

  9. [Swift]LeetCode151. 翻转字符串里的单词 | Reverse Words in a String

    Given an input string, reverse the string word by word. Example: Input: "the sky is blue", ...

  10. [SQL]LeetCode178. 分数排名 | Rank Scores

    Write a SQL query to rank scores. If there is a tie between two scores, both should have the same ra ...