PHP:是否可以访问这样的静态方法:Object :: ChildObject :: method()?

时间:2010-12-26 19:39:28

标签: php javascript oop

在JS中,您可以这种方式访问​​方法:ParentObject.ChildObject.ChildObjMethod() - 可以在PHP中完成吗?

2 个答案:

答案 0 :(得分:2)

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

<?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实例,然后可以在其上调用一个方法。

答案 1 :(得分:1)

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

$parent->child->child_method();

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