魔术方法是什么鬼?

  魔术方法,也叫魔鬼函数。只要学过PHP的都知道什么是魔术方法,魔术方法就是在某些条件下自动执行的函数。

  PHP的魔术方法主要有下面几个,其他的参考PHP官方手册

  

__construct() __destruct() __tostring() __invoke()
__call() __callStatic() __get() __set()
__isset() __unset __clone()  

  

为什么会有魔术方法?

  魔术方法是在需要实现一些功能,但是一般代码做不到或很难做到的时候才能用。

  比如 __construct(),其实该方法就是一个基本的方法,通过PHP内部的判断来运行该函数。也就是我们在初始化类的同时调用了一个函数,但是如果我们使用该方法,就多了PHP本身的一个判断的代码。

  再说 __get(),其实如果需要获取该变量的话,直接设置为public就行了,不能获取的变量就不能获取了,很简单。

  所以说,魔法方法是为了方(lan)便(ai),能不用魔术方法尽量不用。

魔术方法性能测试(__get())

  使用__get()的代码示例

 <?php 

 /**
* 测试类
*/
class test
{
private $name = "jepeng"; public function __get($varname)
{
return $this->name;
}
} $i = 0; while ( $i<= 10000) {
$i++;
$test = new test();
$test->name;
}

  正常代码示例

 <?php 

 /**
* 测试类
*/
class test
{
public $name = "jepeng";
} $i = 0; while ( $i<= 10000) {
$i++;
$test = new test();
$test->name;
}

测试结果:

  一万次循环 十万次循环
__get() 21ms 106ms
正常 17ms 41ms

  结论:

  两种方法少循环相差不到,到了十万级的循环,结果是成倍数增加。所以能不用魔术方法尽量不用魔术方法

  文章为作者学习所得,有纰漏,请留言指出,谢谢支持!转载请附上本文章的连接

最新文章

  1. 走向面试之数据库基础:三、SQL进阶之变量、事务、存储过程与触发器
  2. October 16th Week 43rd Sunday 2016
  3. MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction
  4. C#-2 wpf 项目编程结构设计
  5. Java包的命名规则
  6. MyBatis之四:调用存储过程含分页、输入输出参数
  7. Logback 将日志分级别打印
  8. Css3渐变实例Demo(一)
  9. C++STL_max
  10. html常用标签有哪些?
  11. Python学习笔记_Chapter 6定制数据对象
  12. Spring的IoC容器
  13. os系统
  14. html 刷新重载方法汇总
  15. Storm(三)Storm的原理机制
  16. leetcode ex3 找出穿过最多点的直线 Max Points on a Line
  17. 【struts2】名为chain的ResultType
  18. UVA 2474 - Balloons in a Box 爆搜
  19. JAVA 枚举单例模式
  20. iOS 7 修改默认布局从status bar 底部开始

热门文章

  1. Ugly Number II -- LeetCode
  2. Struts2笔记--文件上传
  3. 利用.net4.0的dynamic特性制造的超级简单的微信SDK
  4. JS -- 一篇文章掌握RequireJS常用知识
  5. 推荐一款Java反编译器,比较好用
  6. 在ubuntu12.04中安装wine和source insight
  7. 通过CVE-2017-17215学习路由器漏洞分析,从入坑到放弃
  8. Java的身份证号码工具类
  9. Hive删除分区
  10. [转载]SecureCRT 绝佳配色方案, 保护你的眼睛