sickcat2004 发表于 2011-12-21 08:44

PHP静态类 Static Class 研究

<p style="TEXT-INDENT: 2em">介绍:</p>
<p style="TEXT-INDENT: 2em">静态类常被用作工具类或者无状态的抽象。举个例子,在 C# 中就有个类
System.Environment
可以访问这个程序所运行机器上的命令行属性、当前文件夹、以及机器名称之类的信息。在PHP中,现在只能使用一个只包含静态方法的抽象类来代替。静态类是非常有用的一个工具,作为工具容器,它可以实现很多复杂的静态继承,这也正式我们提出这个提议的初衷。</p>
<p style="TEXT-INDENT: 2em">声明:</p>
<p style="TEXT-INDENT: 2em"><a href="http://blog.chinaunix.net/attachment/201105/23/20182351_1306120283yyM6.jpg" target="_blank"><img src="http://blog.chinaunix.net/attachment/201105/23/20182351_1306120283yyM6.jpg" .load="imgResize(this, 650);" ;="" border="0"></a></p>
<p style="TEXT-INDENT: 2em">模型特征:</p>
<p style="TEXT-INDENT: 2em">一下特性会在静态类中实现:</p>
<p style="TEXT-INDENT: 2em">1、被声明为静态类的类不允许包含任何非静态成员</p>
<p style="TEXT-INDENT: 2em">2、抽象静态类中的静态方法不允许调用,它必须先被继承。</p>
<p style="TEXT-INDENT: 2em">3、在静态类中,允许抽象的静态方法。(莫名其妙?)</p>
<p style="TEXT-INDENT: 2em">4、静态类不允许含有 构造函数、析构函数、动态拦截函数(本人理解为魔术函数)以及
__toString()。</p>
<p style="TEXT-INDENT: 2em">5、静态类不允许继承自非静态类。</p>
<p style="TEXT-INDENT: 2em">6、为了向下兼容,目前含有静态成员的抽象类/非静态类的行为不会被改变。</p>
<p style="TEXT-INDENT: 2em">7、在抽象类中添加 __setStatic() 以及 __getStatic() 以代替 __get()
、 __set()。</p>
<p style="TEXT-INDENT: 2em">8、静态类不能被实例化</p>
<p style="TEXT-INDENT: 2em">9、静态类可以实现自只包含静态方法的接口==============================================<br><br><strong><font size="4" color="#ff0000">那么php中使用静态类是否比非静态类效率更高?<br></font></strong>第一:两者模型无关的情况下。静态方法访问比生成对象实例要理论上更合理。&nbsp;<br>第二:
就效率上讲,一个静态方法访问,并不比生成一个实例对象访问要来得快。你可以测试便知。就我在5.3下屡试的结果,反而是静态访问要慢一丝丝。
<br>第三<strong>:</strong>但是,这里要考虑到一种情况。比如你有10个业务类。里面都要调用数据库访问的类,那么在这10个业务类里去统统new一遍db类,或者在外部new一遍db类然后用接口方法传到这10个业务类里。自然不如把db类的方法设置成静态方法。然后静态方式调用。&nbsp;
<br><br><strong>所以总结:<br>你要只在一个地方用,其实从程序上讲差不多。要看模型的关系。如果多个地方都在调。静态自然划算。</strong></p>
页: [1]
查看完整版本: PHP静态类 Static Class 研究