〝 古人学问遗无力,少壮功夫老始成 〞php中魔术方法详解,在php中有一类方法,很奇怪常,那就是只要满足一定条件,就会自己执行,那就是php中的魔术方法,码字不易,出精品更难,没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。你必须特别努力,才能显得毫不费力。如果这篇文章能给你带来一点帮助,希望给飞兔小哥哥一键三连,表示支持,谢谢各位小伙伴们。目录一、__construct构造方法二、 __destruct析构方法三、 __clone克隆方法四、__call非静态调用方法五、__callStatic静态调用方法六、__debugInfo打印方法七、__get获取成员属性方法八、__isset方法九、__set方法十、__invoke方法十一、__sleep方法十二、__toString方法十三、__unset方法十四、__wakeup方法

一、__construct构造方法

当类被实例化的时候就会调用
简单来说,就是new一个类的时候,这个方法就会自动执行<?php
class autofelix
{public function __construct(){echo '我是类autofelix';}
}new autofelix();//即可输出:我是类autofelix

二、 __destruct析构方法

当类被销毁时候自动触发
可以使用unset方法触发该方法<?php
class autofelix
{public function __destruct(){echo '我准备销毁你了';}
}$a = new autofelix();
unset($a);//即可输出:我准备销毁你了

三、 __clone克隆方法

当类被克隆时自动会自动调用<?php
class autofelix
{public function __clone(){echo '我克隆了你';}
}$a = new autofelix();
clone $a;//即可输出:我克隆了你

四、__call非静态调用方法

当要调用的方法不存在或者权限不足时候会自动调用
比如我在类的外部调用类内部的private修饰的方法<?php
class autofelix
{private function say() {echo 'hello, 我是autofelix';}public function __call($name, $arguments){echo '你无权调用' . $name . '方法';die;}
}$a = new autofelix();
$a->say(); //按理说应该报错//即可输出:你无权调用say方法

五、__callStatic静态调用方法

当要调用的静态方法不存在或者权限不足时候会自动调用
比如我在类的外部调用类内部的private修饰的静态方法<?php
class autofelix
{private static function say() {echo 'hello, 我是autofelix';}public function __callStatic($name, $arguments){echo '你无权调用' . $name . '方法';die;}
}$a = new autofelix();
$a::say(); //按理说应该报错//即可输出:你无权调用say方法

六、__debugInfo打印方法

该方法会在var_dump()类对象时候被调用
如果没有定义该方法,var_dump()将会打印出所有的类属性<?php
class autofelix
{public function __debugInfo(){echo '你看不到我任何信息的~';}
}var_dump(new autofelix());//即可输出:你看不到我任何信息的~

七、__get获取成员属性方法

通过它可以在对象外部获取私有成员属性<?php
class autofelix
{private $name = 'autofelix';public function __get($name){if(in_array($name, ['name', 'age'])) {echo $this->name;} else {echo '不是什么东西都能访问的~';}}
}$a = new autofelix();
$a->name;//即可输出:autofelix

八、__isset方法

当对不可访问的属性调用isset()或则会empty()时候会被自动调用<?php
class autofelix
{private $name = 'autofelix';public function __isset($name){if(in_array($name, ['name', 'age'])) {echo $this->name;} else {echo '不是什么东西都能访问的~';}}
}$a = new autofelix();
isset($a->name);//结果: autofelix

九、__set方法

给一个未定义的属性赋值时候会被触发<?php
class autofelix
{public function __set($name, $value){echo '你想给' . $name . '赋值' . $value;}
}$a = new autofelix();
$a->name = 'autofelix';//结果: 你想给name赋值autofelix;

十、__invoke方法

对象本身不能直接当函数用
如果对象被当作函数调用就会触发该方法<?php
class autofelix
{public function __invoke(){echo '你还想调用我?';}
}$a = new autofelix();//对象直接当函数调用
$a();//结果: 你还想调用我?

十一、__sleep方法

当在类的外部调用serialize()时会自动被调用<?php
class autofelix
{public function __sleep(){echo '弄啥嘞~';}
}$a = new autofelix();serialize($a);//结果: 弄啥嘞~

十二、__toString方法

当一个类被当作字符串处理时应该返回什么
这里必须返回一个string类型不然会报致命错误<?php
class autofelix
{public function __toString(){return '我是你得不到的对象...';}
}$a = new autofelix();
echo $a;//结果: 我是你得不到的对象...

十三、__unset方法

当对不可访问的属性调用unset()时会被自动调用<?php
class autofelix
{private $name = 'autofelix';public function __unset($name){echo '想删我? 你也配?';}
}$a = new autofelix();
unset($a->name);//结果: 想删我? 你也配?

十四、__wakeup方法

当执行unserialize()方法时会被自动调用<?php
class autofelix
{public function __wakeup(){echo '又想弄啥嘞~';}
}$a = new autofelix();unserialize($a);//结果: 又想弄啥嘞~

php中魔术方法详解相关推荐

  1. PHP之十六个魔术方法详解 转自:青叶

    目录 PHP之十六个魔术方法详解 前言 范例 〇.__serialize() 和 __unserialize() 一. __construct(),类的构造函数 二.__destruct(),类的析构 ...

  2. numpy中reshape方法详解

    numpy中reshape方法详解_zhanggonglalala的博客-CSDN博客_reshape

  3. JavaScript中getBoundingClientRect()方法详解

    JavaScript中getBoundingClientRect()方法详解 getBoundingClientRect() 这个方法返回一个矩形对象,包含四个属性:left.top.right和bo ...

  4. Pandas中resample方法详解

    Pandas中resample方法详解 Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法.重新取样时间序列数据. 方便的 ...

  5. Js中apply方法详解说明

    Js apply 方法 详解 我在一开始看到JavaScript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了, ...

  6. Python中的魔术方法详解

    介绍 在Python中,所有以"__"双下划线包起来的方法,都统称为"Magic Method",中文称『魔术方法』,例如类的初始化方法 __init__ ,P ...

  7. python中new方法详解及_Python中new方法的详解

    new_ 方法是什么? __new__方法其实就是创建对象的方法 new()方法是在类准备将自身实例化时调用. 一个类可以有多个位置参数和多个命名参数,而在实例化开始之后,在调用 init()方法之前 ...

  8. 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解

    内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...

  9. python resample函数_Pandas中resample方法详解

    Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法. 方法的格式是: DataFrame.resample(rule, h ...

最新文章

  1. 图论-有向图的连通性模板题(hdu1296)(hdu1827)
  2. 用这样的方法,我解决了leetcode的大部分的这种题型!
  3. 安徽职高计算机专业对口学校,安徽对口高考学校
  4. linux7下安装git,centos7下安装配置git仓库
  5. .NET平台开源项目速览(12)哈希算法集合类库HashLib
  6. 转HTML、CSS、font-family:中文字体的英文名称
  7. 2020巨量引擎用户旅游全周期行为动机调研报告
  8. 最美旗舰机型又将易主?三星Galaxy S11高清渲染图曝光
  9. iptables中DNAT、SNAT和MASQUERADE的理解
  10. 异构平台对比(GPU FPGA DSP)
  11. 降价上标(Github风味)?
  12. 数据可视化如何做会更好
  13. python 读取文件到字典读取顺序_Python用list或dict字段模式读取文件的方法
  14. python下载后在哪打开_centos6/7系统的自带的python安装在哪里?
  15. 奇迹mu 服务器状态,奇迹mu服务端的架设
  16. 中国176个AAAAA级景区,存起来吧!下一站你去哪里?
  17. 支付宝查询自己UID
  18. 【圈外同学】Day01 一个模型,帮你找到真正热爱的
  19. NVP2650和NVP2650D的区别是什么?
  20. Linux+宝塔安装swoole教程

热门文章

  1. 【linux 下C语言环境搭建】GCC安装和make安装
  2. Bert文本聚类实践
  3. 安装navicat详细流程
  4. 红米8a,刷机到安卓调用之路
  5. ACCESS查询输入日期自带星期
  6. 高等数学(第七版)同济大学 习题10-1 个人解答
  7. vmware虚拟机新建安装windows2000操作系统
  8. 百度地图实现活动定位打卡
  9. DOTween教程☀️DOTween的使用教程
  10. 编写一个歌词随音乐播放滚动的播放器