如何做实例化并在PHP中满口地调用方法?

时间:2010-03-02 19:18:36

标签: php

我试过这两种方式:

(new NewsForm())->getWidgetSchema();

{new NewsForm()}->getWidgetSchema();

没有运气......

4 个答案:

答案 0 :(得分:3)

PHP不允许你这样做。尝试:

function giveback($class)
{
    return $class;
}

giveback(new NewsForm())->getWidgetSchema();

这种语言很奇怪。

答案 1 :(得分:2)

你不能在一条指令中调用instanciation和方法......但是“欺骗”的方法是创建一个函数来返回你正在使用的类的实例 - 然后调用该函数返回对象的方法:

function my_function() {
    return new MyClass();
}
my_function()->myMethod();

并且,在这种情况下,有一个有用的技巧:类的名称和函数的名称不属于同一名称空间 - 这意味着你可以拥有一个类和一个具有同名:他们不会发生冲突!

因此,您可以创建一个与您的类同名的函数,实例化它并返回该实例:

class MyClass {
    public function myMethod() {
        echo 'glop';
    }
}

function MyClass() {
    return new MyClass();
}

MyClass()->myMethod();

(是的,在这个例子中,函数的名称并不那么漂亮 - 但你明白了这一点;-))

答案 2 :(得分:1)

如果是静态方法,你可以这样做:

NewsForm::getWidgetSchema();

答案 3 :(得分:0)

我认为更好的选择是使用factory方法:

class factory_demo {
    public static function factory()
    {
        return new self;
    }
    public function getWidgetSchema()
    { }
}

然后

factory_demo::factory()->getWidgetSchema()

当然,您也可以获得工厂模式的所有好处。不幸的是,这只有在您有权访问代码并且愿意更改代码时才有效。