浅析PHP的静态成员函数效率更高的原因


Posted in PHP onJune 13, 2014

很多php开发人员都知道, 使用类的静态成员函数效率比类的普通成员函数的要高,本文从应用层次分析这个问题

下面是一个范例:

<?php // php静态方法测试
header('Content-Type: text/html; charset=utf-8');
class xclass{
     public static $var1 = '1111111111111111';
     public $var2 = 'aaaaaaaaaaaaa';
     public function __construct()
    {
         $this -> var2 = 'bbbbbbbbbbbbbbbb';
         }
     public static function secho1()
    {
         echo self :: $var1 . '<hr />';
         }
     public function secho2()
    {
         echo $this -> var2 . '<hr />';
         }
     public function secho3()
    {
         echo 'cccccccccccccc<hr />';
         }
     }
 xclass :: secho1();
 xclass :: secho3();
 echo "------------------------------<br />";
 $xc = new xclass();
 $xc -> secho1();
 $xc -> secho2();
 ?>

认真看上面的范例,会发现一个有趣的地方,secho1()定义为静态方法后, 在动态类的对像实例中仍可以引用为动态方法,而secho3()也可以被当作静态成员函数,从这个层面,不难理解为什么说静态成员函数比动态的快。

可能是由于兼容性原因,php的类成员其实并无明显的动静态之分,所有成员在没明确声明的情况下都会被当成静态成员存放在特定的内存区中,所以调用静态成员函数就和调用普通函数一样,速度很快。

但调用动态类则不同,它要以这个类结构作为样本,在内存中重新生成一个对象实例,所以多了一个过程,这对于简单的类来说,可能不算什么,但对于复杂的类来说这是明显影响效率的。

有人会担心,使用静态方法会不会造成内存占用过多,其实从上面分析可以知道,你不声明静态方法,系统依然会把成员当成静态,因此对于一个完全静态方法的类和一个完全动态但没声明实例对象的类占用内存几乎是一样的,所以对于比较直接的逻辑,都建议直接用静态成员方法,当然,一些复杂或对像化明显的逻辑,如果完全用静态类也不是没可能,但那样就失去类的意义了,如果这样,何必OOP,按用途,静态方法特别适用于MVC模式的逻辑类中。

 

PHP 相关文章推荐
PHP概述.
Oct 09 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
解析PHP对现有搜索引擎的调用
Jun 25 PHP
php中如何防止表单的重复提交
Aug 02 PHP
PHP调用C#开发的dll类库方法
Jul 28 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
php处理json格式数据经典案例总结
May 19 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 #PHP
PHPAnalysis中文分词类详解
Jun 13 #PHP
ThinkPHP缓存方法S()概述
Jun 13 #PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 #PHP
浅析ThinkPHP中execute和query方法的区别
Jun 13 #PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 #PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 #PHP
You might like
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
php实现映射操作实例详解
2019/10/02 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
基于jQuery的仿flash的广告轮播代码
2010/11/04 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
js变换显示图片的实例
2013/04/16 Javascript
node.js中使用q.js实现api的promise化
2014/09/17 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
用Python写的图片蜘蛛人代码
2012/08/27 Python
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
python实现双色球随机选号
2020/01/01 Python
python遍历路径破解表单的示例
2020/11/21 Python
CSS3实现多背景模拟动态边框的效果
2016/11/08 HTML / CSS
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
Troy-Bilt官网:草坪割草机、吹雪机、分蘖机等
2019/02/19 全球购物
教师自荐书
2013/10/08 职场文书
实习生体会的自我评价范文
2013/11/28 职场文书
幼儿教师寄语集锦
2014/04/03 职场文书
2016党员学习心得体会范文
2016/01/23 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
vue中 this.$set的使用详解
2021/11/17 Vue.js