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

2015-01-24信息快讯网

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

很多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文件上传判断file是否己选择上传文件的方法
php数组操作之键名比较与差集、交集赋值的方法
php json转换成数组形式代码分享
PHP冒泡算法详解(递归实现)
PHP使用feof()函数读文件的方法
php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
php函数serialize()与unserialize()用法实例
php的dl函数用法实例
CI框架验证码CAPTCHA辅助函数用法实例
教你如何开启shopnc b2b2c 伪静态
C#静态方法与非静态方法实例分析
PHP使用静态方法的几个注意事项
修改destoon会员公司的伪静态中的com目录的方法
使用ob系列函数实现PHP网站页面静态化
php判断数组元素中是否存在某个字符串的方法
单台服务器的PHP进程之间实现共享内存的方法
PHPAnalysis中文分词类详解
ThinkPHP缓存方法S()概述
采用ThinkPHP中F方法实现快速缓存实例
浅析ThinkPHP中execute和query方法的区别
采用thinkphp自带方法生成静态html文件详解
PHP5.5和之前的版本empty函数的不同之处
codeigniter数据库操作函数汇总
使用PHP函数scandir排除特定目录
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
PHP图片等比例缩放生成缩略图函数分享
php截取字符串函数substr,iconv_substr,mb_substr示例以及优劣分析
解决CodeIgniter伪静态失效
php 伪静态之IIS篇
php伪静态之APACHE篇
PHP代码优化之成员变量获取速度对比
PHP 5.0对象模型深度探索之类的静态成员
第七节--类的静态成员
©2014-2024 dbsqp.com