Ben bu iki yolu denedim:
(new NewsForm())->getWidgetSchema();
{new NewsForm()}->getWidgetSchema();
Hayır şans ile ...
Bir instanciation ve bir öğretim yılında bir yöntem çağrısı yapamaz ... Ama "hile" için bir yolu ile çalışıyoruz sınıfının bir örneğini döndürür bir işlev oluşturmak için - ve sonra, bir yöntem çağrısı bir nesne döndüren fonksiyonu:
function my_function() {
return new MyClass();
}
my_function()->myMethod();
Ve durum bu tür, yararlı bir hile vardır: sınıflar ve işlevler isimleri isimleri aynı ad ait değil - you can have a class and a function that have the same name anlamına gelir: onlar değil çatışma olacak!
Yani, siz, bir sınıf olarak aynı ada sahip bunu instanciates ve bu örneği döndüren bir işlev oluşturabilirsiniz:
class MyClass {
public function myMethod() {
echo 'glop';
}
}
function MyClass() {
return new MyClass();
}
MyClass()->myMethod();
(Yeah, the name of the function is not that pretty, in this example -- but you see the point ;-) )
Bence daha iyi bir seçenek factory yöntemini kullanmak olacaktır:
class factory_demo {
public static function factory()
{
return new self;
}
public function getWidgetSchema()
{ }
}
o zaman
factory_demo::factory()->getWidgetSchema()
Tabii ki, siz de fabrika deseni tüm faydaları olsun. Eğer kod erişimi var ve bunu değiştirmek için istekli ise ne yazık ki bu sadece çalışır.