全部博文(13)
2011年(13)
分类: 系统运维
2011-05-23 11:06:45
介绍:
静态类常被用作工具类或者无状态的抽象。举个例子,在 C# 中就有个类 System.Environment 可以访问这个程序所运行机器上的命令行属性、当前文件夹、以及机器名称之类的信息。在PHP中,现在只能使用一个只包含静态方法的抽象类来代替。静态类是非常有用的一个工具,作为工具容器,它可以实现很多复杂的静态继承,这也正式我们提出这个提议的初衷。
声明:
模型特征:
一下特性会在静态类中实现:
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类的方法设置成静态方法。然后静态方式调用。
所以总结:
你要只在一个地方用,其实从程序上讲差不多。要看模型的关系。如果多个地方都在调。静态自然划算。