调用PHP的类的差异

时间:2012-10-24 05:34:18

标签: php fuelphp

通过学习fuelPHP,我介绍了使用范围分辨率调用类,或者::在意义上。通常,当我们在类中调用方法时,我们会这样做......

$myclass = new myclass();
$myclass->mymethod();

关于燃料,通常以这种方式调用方法......

myclass::mymethod();

我想知道两者之间是否有任何区别?范围分辨率是否也是5.3的更新......如果不是,哪一个是理想的,或何时应该使用它们。

感谢。

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()是静态调用。该类充当函数所属的一种命名空间。你不需要一个实例。