fuelDifference in Class Calling PHP



在学习FuelphP的情况下,我在使用范围分辨率的呼叫类时介绍了我的介绍。通常,当我们在课堂中调用方法时,我们会这样做...

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

在燃料上,通常以这种方式调用方法...

myclass::mymethod();

我想知道两者之间是否有任何区别?是范围分辨率也是5.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_harmeled_harmful.html

我不确定 myclass::mymethod();如何工作,因为我只有在调用 STATIC class时才使用这种语法。

MyClass::DoSomething();

将称为名为Dosomething()

的静态方法

$instance = new MyClass();

$instance->DoSomething();

会调用实例方法。

我尚未测试它,但我相信如果您做$instance::DoSomething()

,您会遇到错误

我认为了解为什么有静态通话以及场景后的最佳方法是检查此FuelPhp博客的条目:http://fuelphpp://fuelphp.com/blog/2011/05/为什么 - 你做

明显的区别在于第一个解决方案$myObject->myMethod()是一个动态调用:您需要一个实例来执行myMethod()

在第二个解决方案中,MyClass::myMethod()是静态调用。该类充当函数所属的命名空间。您不需要这个实例。

最新更新