浅析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代码优化及php相关问题总结
Oct 09 PHP
xajax写的留言本
Nov 25 PHP
php从右向左/从左向右截取字符串的实现方法
Nov 28 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
Feb 02 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP自定义序列化接口Serializable用法分析
Dec 29 PHP
PHP 实现base64编码文件上传出现问题详解
Sep 01 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随机输出名人名言的代码
2012/10/07 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
php生成缩略图填充白边(等比缩略图方案)
2013/12/25 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
JavaScript 使用技巧精萃(.net html
2009/04/25 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
JS分页控件 可用于无刷新分页
2013/07/23 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
jQuery实现验证年龄简单思路
2016/02/24 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
详解javascript中对数据格式化的思考
2017/01/23 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
这应该是最详细的响应式系统讲解了
2019/07/22 Javascript
vue中解决拖拽改变存在iframe的div大小时卡顿问题
2020/07/22 Javascript
python 七种邮件内容发送方法实例
2014/04/22 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
python实现定时提取实时日志程序
2018/06/22 Python
Pycharm简单使用教程(入门小结)
2019/07/04 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
丹麦优惠购物网站:PLUSSHOP
2019/03/24 全球购物
医学生求职自荐信
2013/10/25 职场文书
自我评价范文点评
2013/12/04 职场文书
建筑经济管理专业求职信分享
2014/01/06 职场文书
自我推荐信范文
2014/05/09 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
安全责任书范文
2014/08/25 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
POST提交数据常见的四种方式
2022/01/18 HTML / CSS