2017-04-12 1 views
0

Ich habe folgende Situation:Php typehinting in aufgerufenen Methode des Objekts, in Basisklasse erstellt

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; 
    } 
} 

Wenn ich diesen Code verwenden, um execute() und Auftrag Objekte erhalten (wie analysiert Objekt), ich bin dieses Schreiben:

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

Also meine Frage ist - ist es eine Möglichkeit, eine Art Basis (abstrakte Klasse, Schnittstelle) Klasse Implementierung Methode zu übergeben, die sich von der Basisklasse aufgerufen wird, für immer schön typehint von erstellt Objekt. Cuz ich kann Benutzer, der Hauptklasse erweitert, mit seinen eigenen Feldern erstellen. Aber das Aufrufen von new User() -> get() -> excute() gibt mir das gleiche Ergebnis - ein Objekt vom Typ Main

+1

'$ result -> $ id' ohnehin nicht funktionieren, ist es zuerst' $ result-> id' aber da diese Eigenschaft, die Sie nicht darauf zugreifen können direkt privat ist. – Augwa

+0

Stellen Sie sich vor, dass Requisiten öffentlichen Zugriff haben, $ result Calls id prop. Das ist nicht die Hauptidee des Problems –

+0

Ich habe meinen Beitrag bearbeitet, danke –

Antwort

0

Sie können fast alles annotieren, hier ist Ihr Code mit allem kommentiert.

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; 
    } 
} 
Verwandte Themen