2017-04-12 132 views
0

我有以下情況:腓typehinting的對象調用的方法,在基類中創建

class Main { 
    function get() { 
     return new Query(); 
    } 
} 

class Order extends Main { 
    public $id; 
    public $name; 
} 

class Query { 
    /** 
    * @return Main 
    */ 
    function execute() { 
     /// some code here 
     return $parsedObject; 
    } 
} 

當我使用此代碼執行(),並得到訂單的對象(如解析的對象),我寫這篇:

$order = new Order(); 
$result = $order->get()->execute(); 
$result->id; /// typehint not works, cuz $result is type of Main, not more concrete type Order 

所以我的問題是 - 有什麼辦法可以傳遞一個類型基(抽象類,接口)類實現以法解創造美麗typehint,是從基類調用,目的。因爲我可以創建用戶,擴展主類,與他自己的領域。但是調用新的User() - > get() - > excute()會給我相同的結果 - 一個Main類型的對象

+1

'$結果 - > $ id'無論如何都不會工作,首先它是'$ result-> id'但是因爲該財產是私有的,你不能直接訪問它。 – Augwa

+0

想象一下,道具有公共訪問,$ result調用id prop。這不是問題的主要想法 –

+0

我編輯了我的帖子,謝謝 –

回答

0

您可以註釋幾乎任何東西,這裏是您的代碼,帶有註釋的所有東西。

Type Hint

/** 
* Class Main 
*/ 
class Main { 

    /** 
    * @return Query 
    */ 
    function get() { 
     return new Query(); 
    } 
} 

/** 
* Class Order 
*/ 
class Order 
    extends Main { 

    /** @var int */ 
    public $id; 

    /** @var string */ 
    public $name; 
} 

/** 
* Class Query 
*/ 
class Query { 

    /** 
    * @return Main 
    */ 
    function execute() { 
     /// some code here 
     return $parsedObject; 
    } 
} 
相關問題