簡體   English   中英

如何做實例化並在PHP中滿口地調用方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM