PHP:使用范围解析运算符调用非静态方法


PHP: calling non-static methods with scope resolution operator

可能的重复:
使用"::"调用非静态方法">
PHP中的静态方法和非静态方法有什么区别吗?

如果我们不尝试使用$this访问对象上下文中的任何内容,那么允许使用:调用非静态方法的原因是什么?这是向后兼容性的问题,还是出于某种特殊原因?我应该习惯于避免使用:来访问非静态方法吗?

class Foo{    
public function Bar(){
    echo "this works just fine"; 
    }
}
Foo::Bar();

有些人可能会这样做有几个原因。

  • 一种是,函数可能存在于类中,并且可能不依赖于被实例化的类来产生结果,并且您可能无法实例化该类,或者它是一个繁重的实例化,所以您只需调用该函数
  • 它是加载单例所必需的
  • 它在Factory模式类中很有用
  • 也许有人只是想将相关函数组合在一起,而不是对所有函数使用命名约定
  • 如果需要,可以访问抽象类中的方法
  • 我相信还有更多

http://www.ibm.com/developerworks/library/os-php-designptrns/