【问题标题】:Difference between double colon and arrow operators in PHP? [duplicate]PHP中双冒号和箭头运算符的区别? [复制]
【发布时间】:2010-10-18 17:01:59
【问题描述】:

在php web 手册的侧边栏中,link text addChild 方法使用:: 范围解析运算符,但在示例中它使用Arrow 运算符。谁能告诉我这是为什么?

【问题讨论】:

    标签: php


    【解决方案1】:

    :: 用于静态元素,-> 用于实例元素。

    例如:

    class Example {
      public static function hello(){
        echo 'hello';
      }
      public function world(){
        echo 'world';
      }
    }
    
    // Static method, can be called from the class name
    Example::hello();
    
    // Instance method, can only be called from an instance of the class
    $obj = new Example();
    $obj->world();
    

    More about the static concept

    【讨论】:

    • 为了完整性还应注意static 方法可以直接从实例调用,方法与调用“实例”方法相同:$obj->hello()
    • @prodigitalson 但请注意,它们仍然表现得像静态的,所以没有 $this-business xD
    • @prodigitalson,我认为您可能在评论中提到了这一点 - 但只是为了澄清一点。是否可以在对象实例上调用静态成员,例如:$obj::hello()?我的 IDE 为引用为 $this::$variableName 的变量提供了一些错误。
    • 你不能用一个对象实例来调用它们——你用一个类名来调用它们。而不是$this::methodName()你使用self::methodName()TheClass::methodName()。从 5.3 开始,您还可以使用 $classname::methodName() 其中 $classname 是字符串类名。
    【解决方案2】:

    箭头表示 addChild 被称为对象的成员(在本例中为 $sxe)。

    双冒号表示 addChild 是 SimpleXMLElement 类的成员。

    【讨论】:

      【解决方案3】:

      这只是表示它是一个对象的方法,与实际使用无关。

      在文档的情况下,您没有处理像 $object 这样的对象的实例,因此 -> 运算符不正确,因为您想列出实际的类名。因此,按照类名为静态的静态方法的用法,您可以使用范围 res。运营商::...

      这通常是 php 文档对类的工作方式。

      【讨论】:

        猜你喜欢
        • 2011-03-11
        • 1970-01-01
        • 2012-01-02
        • 2016-04-17
        • 2013-10-19
        • 1970-01-01
        • 2019-08-06
        相关资源
        最近更新 更多