php static class

piaoling  2011-08-02 11:32:46

介绍:

静态类常被用作工具类或者无状态的抽象。举个例子,在 C# 中就有个类 System.Environment 可以访问这个程序所运行机器上的命令行属性、当前文件夹、以及机器名称之类的信息。在PHP中,现在只能使用一个只包含静态方法的抽象类来代替。静态类是 非常有用的一个工具,作为工具容器,它可以实现很多复杂的静态继承,这也正式我们提出这个提议的初衷。

声明:

PHP静态类 Static Class 研究 - PHP程序员 - 李国华【PHP程序员C++】博客

模型特征:

一下特性会在静态类中实现:

1、被声明为静态类的类不允许包含任何非静态成员

2、抽象静态类中的静态方法不允许调用,它必须先被继承。

3、在静态类中,允许抽象的静态方法。(莫名其妙?)

4、静态类不允许含有 构造函数、析构函数、动态拦截函数(本人理解为魔术函数)以及 __toString()。

5、静态类不允许继承自非静态类。

6、为了向下兼容,目前含有静态成员的抽象类/非静态类的行为不会被改变。

7、在抽象类中添加 __setStatic() 以及 __getStatic() 以代替 __get() 、 __set()。

8、静态类不能被实例化

9、静态类可以实现自只包含静态方法的接口==============================================

那么php中使用静态类是否比非静态类效率更高?
第一:两者模型无关的情况下。静态方法访问比生成对象实例要理论上更合理。 
第二: 就效率上讲,一个静态方法访问,并不比生成一个实例对象访问要来得快。你可以测试便知。就我在5.3下屡试的结果,反而是静态访问要慢一丝丝。
第三但是,这里要考虑到一种情况。比如你有10个业务类。里面都要调用数据库访问的类,那么在这10个业务类里去统统new一遍db类,或者在外部new一遍db类然后用接口方法传到这10个业务类里。自然不如把db类的方法设置成静态方法。然后静态方式调用。 

所以总结:
你要只在一个地方用,其实从程序上讲差不多。要看模型的关系。如果多个地方都在调。静态自然划算。

类别 :  PHP(78)  |  浏览(3469)  |  评论(0)
发表评论(评论将通过邮件发给作者):

Email: