PHP几种常见魔术方法与魔术变量解析
PHP几种常见魔术方法与魔术变量解析
先不多说,直接上代码,如下:
1 class Demo 2 { 3 private $str = 'str'; 4 5 //实例化时自动加载function 6 public function __construct() 7 { 8 echo "start<br/>"; 9 } 10 11 //__call()用来获取没有定义的function 12 public function __call($name, $arguments) 13 { 14 echo $name.'_call<br>'; 15 } 16 17 //获取私有变量 18 public function __get($name) 19 { 20 // TODO: Implement __get() method. 21 echo $this->$name.'_get<br/>'; 22 } 23 24 //通过关键字 clone 克隆一个对象时该对象调用__clone()方法 25 public function __clone() 26 { 27 // TODO: Implement __clone() method. 28 } 29 30 //__set()设置私有变量的值 31 public function __set($name, $value) 32 { 33 // TODO: Implement __set() method. 34 $this->$name = $value; 35 } 36 37 //————callStatic()调用没有被定义的static静态function 38 public static function __callStatic($name, $arguments) 39 { 40 // TODO: Implement __callStatic() method. 41 echo $name.'_classStatic'; 42 } 43 44 //删除类对象时候自动调用 45 public function __destruct() 46 { 47 // TODO: Implement __destruct() method. 48 echo "end"; 49 } 50 51 52 } 53 54 $class = new Demo(); 55 $class->success(); 56 $class->succ = 111; 57 echo $class->succ; 58 echo $class->str; 59 echo '<br>'; 60 $obj = clone $class; 61 print_r($obj); 62 echo '<br>'; 63 $class::end(); 运行结果:
start success_call 111str_getclone Demo Object ( [str:Demo:private] => str [succ] => 111 ) end_classStatic endend
方法总结:
1. __set(),__get(),__isset(),__unset()可以归之为一类,适用于私有变量的设置、取值、判断、删除的操作。
2. __construct()构造函数,__desctruct()析构函数,实例化类的时候就会产生,有一点不同,构造在最前面,
析构函数在最后面
3. 当调用class中没有定义的方法时,会报错fail error,如果class中定义了__call(),会直接调用__call()方法进行操作。
例如:$class->success('data');类中的__call方法开始执行把参数转换为数组形式array([0] => 'data');
__callStatic()方法同理,只是对没有定义的静态方法起作用。
几种常见的魔术变量:
1 namespace app; 2 3 //__LINE__ 当前脚本行号 4 echo __LINE__.'<br/>'; 5 6 //__FILE__ 文件的完整路径与文件名 7 echo __FILE__.'<br/>'; 8 9 //__DIR__ 文件所在目录 10 echo __DIR__.'<br/>'; 11 12 class Test { 13 function demo(){ 14 //__FUNCTION__ 函数名称 ,php5以后返回该函数被定义时的名字(区分大小写) 15 echo __FUNCTION__.'<br/>'; 16 17 //__CLASS__ 类名称,PHP 5 起本常量返回该类被定义时的名字(区分大小写)。 18 //注意自 PHP 5.4 起 __CLASS__ 对 trait 也起作用。 19 //当用在 trait 方法中时,__CLASS__ 是调用 trait 方法的类的名字。 20 echo __CLASS__.'<br/>'; 21 22 //__METHOD__ 类的方法名,返回该方法被定义时的名字(区分大小写) 23 echo __METHOD__.'<br/>'; 24 25 26 //__NAMESPACE__ 当前命名空间 27 echo __NAMESPACE__.'<br/>'; 28 } 29 } 30 31 (new Test())->demo(); 32 33 trait HelloWorld { 34 public function sayHello() { 35 //__TRAIT__ Trait 的名字 PHP 5.4 起此常量返回 trait 被定义时的名字(区分大小写) 36 echo __TRAIT__.'<br/>'; 37 } 38 } 39 40 class TheWorldIsNotEnough { 41 use HelloWorld; 42 } 43 $o = new TheWorldIsNotEnough(); 44 $o->sayHello();
输出结果:
12 G:\phpstudy\PHPTutorial\WWW\phpDemo\03-08.php G:\phpstudy\PHPTutorial\WWW\phpDemo demo app\Test app\Test::demo app app\HelloWorld
PHP几种常见魔术方法与魔术变量解析相关推荐
- 寻找网站后台的几种常见的方法
(注:本教程仅供学习交流使用,不可用于一切未授权的网络攻击和违法行为!) 当我们进入一个网站时,如何对其后台进行查找.从而进一步渗透?今天给大家介绍几种常见的方法: 查看网站图片中的属性 我们可以随机 ...
- excel 几种常见使用方法
excel 几种常见使用方法 问题1:将 excel 某一列删除一个相同的单位,比如 kw 解决方案: 选中整列数据,按 ctrl + H 快捷键,将 kw 替换为 空,点击全部替换即可. 问题2:针 ...
- python魔术方法call_php魔术方法__call
__call是魔术方法中的一个,当程序调用到当前类中未声明或没权限调用的方法时,就会调用__call方法 class test { public function emptyFunc(){ $getA ...
- 简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法
感谢本文几种描述方法,让我解决了最近的一段时间的疑问,转载下来,以供后面查血使用. 本文链接:https://blog.csdn.net/huanghanqian/article/details/52 ...
- Java实现几种常见排序方法
为什么80%的码农都做不了架构师?>>> 日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序 ...
- .魔术方法、魔术常量
1.__construct() 实例化对象时被调用,当__construct 和以类名为函数名的函数同时存在时,__construct 将 被调用,另一个不被调用. 2.__destruct() 当删 ...
- java 鸡尾酒排序_Java实现几种常见排序方法
日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...
- 八种常见排序方法总结 C/C++代码实现
目前评价排序算法的好坏标准主要有两点: 1.执行时间:高效的排序算法的比较次数和移动次数都应该尽可能的少. 2.辅助空间:算法执行期间所需要的辅助空间与待排序数据量无关. 文章目录 1.冒泡排序 2. ...
- python字符串27种常见的方法
如有字符串 mystr = 'hello world itcast and itcastcpp' ,以下是常见的操作: <1>find 检测 str 是否包含在 mystr中,如果是返回开 ...
最新文章
- 手把手教你使用 YOLOV5 训练目标检测模型
- oracle dg备份恢复,DG丢失归档,使用增量备份恢复一例
- vmware虚拟机redhat7.2下docker容器安装hadoop
- springmvc4 ajax 406,Spring4 MVC 中,jQuery ajax (406 Not Acceptable)
- 判断线段相交 + vector. erase迭代指针 的使用 poj 2653 Pick-up sticks
- 百度笔试题,malloc/free与new/delete的区别与联系
- [UVa-437] Color Length
- “东数西算”,全国一体化算力网络八大枢纽节点批复函+图解
- map.clear还是重新new_JS 的 new 到底是干什么的?
- c语言printf输出中文报错,printf输出中文后还带有数字是怎么回事?
- 鼎博电梯门禁数据分析
- 特殊符号大全复制_上榜!4.15特殊符号大全优美的制作网名符号案例分享,适合微信游戏昵称...
- 核心微生物分析_中国白酒发酵过程中的核心微生物群及其与环境因子的关系
- gem devise配置
- 官宣! 国际著名投资家吉姆·罗杰斯确认出席钛媒体2021 T-EDGE
- WEB、FTP服务器的搭建
- manjaro 安装的艰辛历程,常用软件安装以及踩坑
- 计算机操作系统之进程
- android 打赏功能,微信公号赞赏功能恢复:可直接收打赏 iOS安卓均可用
- Python编程:给定y和m,计算y年m月有多少天