2017-04-12 141 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; 
    } 
} 
相关问题