惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
B
Blog RSS Feed
L
LangChain Blog
Jina AI
Jina AI
爱范儿
爱范儿
C
Check Point Blog
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
月光博客
月光博客
GbyAI
GbyAI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Stack Overflow Blog
Stack Overflow Blog
V
V2EX
A
About on SuperTechFans
有赞技术团队
有赞技术团队
Microsoft Azure Blog
Microsoft Azure Blog
The GitHub Blog
The GitHub Blog
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题

博客园 - 慕容木木

DeepSeek Harness - DeepSeek 开源 Agent 运行时底座,万物皆插件,7400+ Star 一日爆火 如何调整3D打印的松紧? 3D耗材拉丝需要干燥的方法 WeMD - 更优雅的 Markdown 公众号排版工具,一键复制到微信 【免费软件】Motrix Next - 全能下载神器回归,体积缩小4倍、迅雷替代 【免费软件】Recordly - 开源录屏神器,一键制作专业演示视频 一场碳基大脑的认知起义 【AI赋能】百宝箱内测OpenClaw,测试推送消息成功,手把手教你怎么做(20260214) 手把手教你安全移除 OpenClaw:全流程清理与避坑指南 【免费领取】OpenClaw 国内部署完全指南,打造你的专属 AI 数字助手(文末有获取方法) OpenClaw爆火背后:我的冷思考 【全网最全教程】使用最强DeepSeekR1+联网的火山引擎,没有生成长度限制,DeepSeek本体的替代品,可本地部署+知识库,注册即可有750w的token使用 即将迎来全民编程时代 免登录的华为小艺+DeepSeek才是yyds,这个结合太丝滑了 Cherry Studio:最强电脑端AI工具合集软件推荐与使用方法(有满血DeepSeek R1的小艺) 全网最全的DeepSeek的使用指导资源,拿去用来操作其他的大模型也一样有用,你去找付费培训不如打赏我一毛 Qwen2.5 Max:最有可能是DeepSeek R1的平替 本地部署最强人工智能服务:方案(一)Chatbox+硅基流动(满血DeepSeek R1) CentOS7安装nvm和node (vm/vb)虚拟机复制或者拷贝之后连不上网络怎么处理? Vmware共享文件夹安装设置方法(window与Linux使用共享文件夹) VirtualBox配置安装入门(Linux连不上网络和设置共享文件夹) PHP中常见的几种运行代码的方式 PHP性能之语言性能优化:vld——查看代码opcode的神器 PHP性能之语言性能优化说明 PHP性能:序——谈ab(Apache Bench)压力测试工具
PHP性能之语言性能优化:魔术方法好不好?
慕容木木 · 2017-02-07 · via 博客园 - 慕容木木

魔术方法是什么鬼?

  魔术方法,也叫魔鬼函数。只要学过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


  结论:

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

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