浅析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 相关文章推荐
什么是MVC,好东西啊
May 03 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
基于PHP创建Cookie数组的详解
Jul 03 PHP
php时间戳转换的示例
Mar 31 PHP
PHP的cURL库简介及使用示例
Feb 06 PHP
php读取文件内容到数组的方法
Mar 16 PHP
php给图片加文字水印
Jul 31 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 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新手上路(十一)
2006/10/09 PHP
PHP爆绝对路径方法收集整理
2012/09/17 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
2014/06/23 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP简单实现冒泡排序的方法
2016/12/26 PHP
Jquery优化效率 提升性能解决方案
2010/09/06 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
不同的jQuery API来处理不同的浏览器事件
2012/12/09 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
jquery图片滚动放大代码分享(1)
2015/08/25 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
js读取本地文件的实例
2017/12/22 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
[01:38]DOTA2辉夜杯 欢乐的观众现场采访
2015/12/26 DOTA
python使用htmllib分析网页内容的方法
2015/05/08 Python
在Django中编写模版节点及注册标签的方法
2015/07/20 Python
python读取oracle函数返回值
2016/07/18 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
Python用K-means聚类算法进行客户分群的实现
2020/08/23 Python
python简单实现9宫格图片实例
2020/09/03 Python
python 模拟登陆github的示例
2020/12/04 Python
CSS3 transforms应用于背景图像的解决方法
2019/04/16 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
墨西哥网上超市:Superama
2018/07/10 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
三爱活动实施方案
2014/03/19 职场文书
百年校庆节目主持词
2014/03/27 职场文书
干部鉴定材料
2014/05/18 职场文书
明确岗位职责
2015/02/14 职场文书
升学宴来宾致辞
2015/07/27 职场文书
2019新员工试用期转正工作总结范文
2019/08/21 职场文书
python tkinter实现定时关机
2021/04/21 Python
MSSQL基本语法操作
2022/04/11 SQL Server
Redis特殊数据类型bitmap位图
2022/06/01 Redis