[英]How to do instantiation and call a method in a mouthful in PHP?
我試過這兩種方式:
(new NewsForm())->getWidgetSchema();
{new NewsForm()}->getWidgetSchema();
沒有運氣......
PHP不允許你這樣做。 嘗試:
function giveback($class)
{
return $class;
}
giveback(new NewsForm())->getWidgetSchema();
這是一種相當古怪的語言怪癖。
你不能在一條指令中調用instanciation和方法......但是“欺騙”的方法是創建一個函數來返回你正在使用的類的實例 - 然后,調用一個方法返回對象的函數:
function my_function() {
return new MyClass();
}
my_function()->myMethod();
並且,在這種情況下,有一個有用的技巧:類的名稱和函數的名稱不屬於同一名稱空間 - 這意味着您可以擁有一個具有相同名稱的類和函數 :它們贏了“沖突!
因此,您可以創建一個與您的類同名的函數,實例化它並返回該實例:
class MyClass {
public function myMethod() {
echo 'glop';
}
}
function MyClass() {
return new MyClass();
}
MyClass()->myMethod();
(是的,在這個例子中,函數的名稱並不那么漂亮 - 但你明白了這一點;-))
如果它是靜態方法,您可以這樣做:
NewsForm::getWidgetSchema();
我認為更好的選擇是使用factory
方法:
class factory_demo {
public static function factory()
{
return new self;
}
public function getWidgetSchema()
{ }
}
然后
factory_demo::factory()->getWidgetSchema()
當然,您也可以獲得工廠模式的所有好處。 不幸的是,這只有在您有權訪問代碼並且願意更改代碼時才有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.