PHP性能之语言性能优化:魔术方法好不好?

魔术方法是什么鬼?

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

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

  

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

  

为什么会有魔术方法?

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

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

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

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

 

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

  使用__get()的代码示例

复制代码
 1 <?php 
 2 
 3 /**
 4 * 测试类
 5 */
 6 class test
 7 {
 8     private $name = "jepeng";
 9 
10     public function __get($varname)
11     {
12         return $this->name;
13     }
14 }
15 
16 $i = 0;
17 
18 while ( $i<= 10000) {
19     $i++;
20     $test = new test();
21     $test->name;
22 }
复制代码

  正常代码示例

复制代码
 1 <?php 
 2 
 3 /**
 4 * 测试类
 5 */
 6 class test
 7 {
 8     public $name = "jepeng";
 9 }
10 
11 $i = 0;
12 
13 while ( $i<= 10000) {
14     $i++;
15     $test = new test();
16     $test->name;
17 }
复制代码

测试结果:

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


  结论:

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

 

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

posted @   慕容木木  阅读(1133)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示