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

原文地址:http://small.aiweimeng.top/index.php/archives/49.html

PHP几种常见魔术方法与魔术变量解析 1相关推荐

  1. PHP几种常见魔术方法与魔术变量解析

    PHP几种常见魔术方法与魔术变量解析 先不多说,直接上代码,如下: 1 class Demo 2 { 3 private $str = 'str'; 4 5 //实例化时自动加载function 6 ...

  2. 寻找网站后台的几种常见的方法

    (注:本教程仅供学习交流使用,不可用于一切未授权的网络攻击和违法行为!) 当我们进入一个网站时,如何对其后台进行查找.从而进一步渗透?今天给大家介绍几种常见的方法: 查看网站图片中的属性 我们可以随机 ...

  3. excel 几种常见使用方法

    excel 几种常见使用方法 问题1:将 excel 某一列删除一个相同的单位,比如 kw 解决方案: 选中整列数据,按 ctrl + H 快捷键,将 kw 替换为 空,点击全部替换即可. 问题2:针 ...

  4. python魔术方法call_php魔术方法__call

    __call是魔术方法中的一个,当程序调用到当前类中未声明或没权限调用的方法时,就会调用__call方法 class test { public function emptyFunc(){ $getA ...

  5. 简要描述内部连接和外部连接之间的区别_sqlserver的几种常见连接方法

    感谢本文几种描述方法,让我解决了最近的一段时间的疑问,转载下来,以供后面查血使用. 本文链接:https://blog.csdn.net/huanghanqian/article/details/52 ...

  6. Java实现几种常见排序方法

    为什么80%的码农都做不了架构师?>>>    日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序 ...

  7. .魔术方法、魔术常量

    1.__construct() 实例化对象时被调用,当__construct 和以类名为函数名的函数同时存在时,__construct 将 被调用,另一个不被调用. 2.__destruct() 当删 ...

  8. java 鸡尾酒排序_Java实现几种常见排序方法

    日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一 ...

  9. 八种常见排序方法总结 C/C++代码实现

    目前评价排序算法的好坏标准主要有两点: 1.执行时间:高效的排序算法的比较次数和移动次数都应该尽可能的少. 2.辅助空间:算法执行期间所需要的辅助空间与待排序数据量无关. 文章目录 1.冒泡排序 2. ...

  10. python字符串27种常见的方法

    如有字符串 mystr = 'hello world itcast and itcastcpp' ,以下是常见的操作: <1>find 检测 str 是否包含在 mystr中,如果是返回开 ...

最新文章

  1. MySQL抓包工具:MySQL Sniffer
  2. Flask-请求上下文
  3. Self-training在目标检测任务上的实践
  4. css新奇技术及其未来发展
  5. Android(java)学习笔记133:Eclipse中的控制台不停报错Can't bind to local 8700 for debugger...
  6. 猜字游戏(python版加C语言版)
  7. Redis 更新(set) key值 会重置过期时间问题
  8. 蓝桥杯2019年第十届C/C++省赛C组第一题-求和
  9. Eclipse中代码自动提示功能设置
  10. Vczh Library++ 语法分析器开发指南(转载)
  11. timesat数据如何读取_【续篇】如何通过HART协议将流量计实时数据读取到上位机(文末有彩蛋)...
  12. [ActiveForm] -- ActiveForm::begin表单用法
  13. 平均年薪23万!为什么却很少见程序员炫富?
  14. C语言度化为度分秒的方法,一句话转换度:分:秒格式为度.度度度
  15. 手动给tabcontrol的tabPage加图标图片方法
  16. Python 爬虫下载喜马拉雅音频文件
  17. 回顾大一|我们要做的是提前准备,而不是提前焦虑
  18. Latex中处理中文
  19. 中国口腔医疗行业发展模式与投资战略规划分析报告2022-2028年版
  20. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day36】—— 实战那些事儿1

热门文章

  1. Flutter实战之底部导航栏 BottomNavigation
  2. android clipRect 用法说明
  3. 更好的理解装饰设计模式和代理设计模式
  4. python基础知识——文件
  5. linux程序内码,windows系统与linux系统的内码转换总结
  6. 接口自动化测试框架搭建(7、连接数据库提交sql方法以及打印日志方法封装)--python+HTMLTestRunnerCN+request+unittest+mock+db
  7. 联想台式机usb驱动_windows安装系列教程—驱动安装
  8. android 傅里叶变换_Android连载38访问联系人
  9. mysql grant记录信息
  10. mysql 纵列转横列_mysql行列转换方法总结