2017-04-12 5 views
0

私は、次のような状況があります:私は(実行)と(解析されたオブジェクトなど)Orderオブジェクトを取得するには、このコードを使用するとPHPの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を取得するために、それは、その基本クラスから呼び出されたがありますオブジェクト。私は自分のフィールドでMainクラスを拡張するUserを作成することができます。しかし、新しいUser() - > get() - > excute()を呼び出すと、同じ結果が得られます - メインのオブジェクト

+1

'$結果 - > $ id'とにかく動作しません、最初のそれは' $ result-> id'だが、そのプロパティがプライベートであるので、それを直接アクセスすることはできません。 – Augwa

+0

小道具が公共アクセス権を持っていると想像してください。$ result calls 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; 
    } 
}