【问题标题】:PHP: is it possible to access static methods like this: Object::ChildObject::method()?PHP:是否可以访问像这样的静态方法:Object::ChildObject::method()?
【发布时间】:2011-05-30 22:14:18
【问题描述】:

在 JS 中,您可以通过以下方式访问方法:ParentObject.ChildObject.ChildObjMethod() -- 在 PHP 中也可以这样做吗?

【问题讨论】:

  • 什么是ParentObject,什么是ParentObject::ChildObject?它们中的任何一个是类,还是一个或两个本身就是一个实例?
  • 好吧,我想知道静态类(对象)是否可以具有具有某些方法的嵌套静态类。通常你可以像 Class::method() 一样使用它们,但是 Class 可以有一个嵌套的子类,我可以像上面描述的那样访问 - Class::SubClass::SomeMethod() 吗?
  • 不,您不能在 PHP 的变量中存储对类的引用,或者从方法调用中返回一个类。在 PHP 中,类不是这种意义上的“第一类对象”。

标签: php javascript oop


【解决方案1】:

:: 可用于访问静态类成员。但是您也可以使用普通的-> 箭头来访问 PHP 中的实例化子对象:

$parent->child->child_method();

另见Reference - What does this symbol mean in PHP?

【讨论】:

    【解决方案2】:

    不完全是。 :: 运算符用于调用 class 上的 static 方法。因此,您可以静态存储对对象的引用,但随后您需要使用 -> 运算符调用该方法。

    <?php
        class Foo
        {
            static public $bar;
    
            static public function initStaticMembers()
            {
                self::$bar = new Bar();     
            }
        }
    
        class Bar
        {
            public function method()
            {
                echo "Hello World\n";
            }
    
        }
    
        Foo::initStaticMembers();
        Foo::$bar->method();
    

    没有办法

        Object::ChildObject::method();
    

    方法链本质上是类似的捷径

        $o = Object::ChildObject;
        $o::method();
    

    第一次调用,并返回或分配一些东西。然后在返回的东西上调用下一个方法。您不能使用 PHP 将类存储在变量中,或从函数返回类。因此,您所要求的确切语法是不可能的。

    也就是说,方法链在 PHP 中变得越来越流行。语法如下

        $o = new Baz();
        $o->method()->anotherMethod()->yetAnotherMethod();
        $o->someObjectReference->methodCall()->etc();
    

    正在成为普遍的地方。这是有效的,因为每个调用或变量引用

        $o->method();
        $o->someObjectReference;
    

    返回另一个 Object 实例,然后可以调用它的方法。

    【讨论】:

      猜你喜欢
      • 2021-11-24
      • 2015-05-25
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      相关资源
      最近更新 更多