我试过这两种方式:
(new NewsForm())->getWidgetSchema();
{new NewsForm()}->getWidgetSchema();
没有运气......
答案 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()
当然,您也可以获得工厂模式的所有好处。不幸的是,这只有在您有权访问代码并且愿意更改代码时才有效。