通过学习fuelPHP,我介绍了使用范围分辨率调用类,或者::在意义上。通常,当我们在类中调用方法时,我们会这样做......
$myclass = new myclass();
$myclass->mymethod();
关于燃料,通常以这种方式调用方法......
myclass::mymethod();
我想知道两者之间是否有任何区别?范围分辨率是否也是5.3的更新......如果不是,哪一个是理想的,或何时应该使用它们。
感谢。
答案 0 :(得分:3)
范围解析运算符用于访问::const
类常量,::$var
等静态变量或::method()
等静态方法。
请参阅http://php.net/manual/en/language.oop5.static.php
可以在没有定义类的实例的情况下调用静态方法。它们在该类中使用static
关键字定义。
例如,CakePHP的一个静态方法定义如下:
class ClassRegistry {
// ...
public static function &getInstance() {
// ...
}
}
...您可以调用ClassRegistry::getInstance()
。
如果没有static
关键字,您需要ClassRegistry
类的实例来调用该函数。
您可以在此处阅读更多内容,尤其是有关在您自己的代码中使用static
方法有时可能是个坏主意的原因:http://kore-nordmann.de/blog/0103_static_considered_harmful.html
答案 1 :(得分:0)
我不确定myclass::mymethod();
将如何工作,因为我只在调用STATIC
类时使用这种语法。
MyClass::DoSomething();
会调用名为DoSomething()的静态方法
,而
$instance = new MyClass();
$instance->DoSomething();
会调用实例方法。
我没有测试过,但我相信如果你$instance::DoSomething()
答案 2 :(得分:0)
我认为了解静态调用的原因及其在幕后的作用的最佳方法是检查此FuelPHP博客的条目:http://fuelphp.com/blog/2011/05/why-did-you-do-that
明显不同的是,第一个解决方案$myObject->myMethod()
是动态调用:您需要一个实例来执行myMethod()
。
在第二个解决方案中,MyClass::myMethod()
是静态调用。该类充当函数所属的一种命名空间。你不需要一个实例。