2015-09-03 14 views
1

有沒有辦法正確鍵入提示\ SimpleXMLElement?所以我不必鍵入所有訪問它的\ SimpleXMLElement。如何正確鍵入提示SimpleXMLElement?

如果我想有typehinting一路,我現在需要做的是這樣:

/** 
    * @var \SimpleXMLElement $values (this is not! an array, yet it is traversable) 
    */ 
    $values = $response->params->param->value->array->data->value; 
    foreach ($values as $row) { 
     $row = $row->array->data->value; 

     /** 
     * @var \SimpleXMLElement $row 
     */ 

     $entry = $row[0]; 

     /** 
     * @var \SimpleXMLElement $entry 
     */ 
     $xmlString = $entry->asXML(); 
} 

這似乎完全冗長和冗餘。有沒有辦法鍵入提示SimpleXMLElement,以便它返回的所有內容也將被coreclty typehinted?

回答

3

如果您按住Ctrl鍵並點擊PHPStorm中SimpleXMLElement的「定義」,您將看到它有一個存根類定義,它用於自動完成和代碼分析。

重載->操作者在該存根表示如下(從PHPStorm 9.0截取):

/** 
* Provides access to element's children 
* @param $name child name 
* @return SimpleXMLElement[] 
*/ 
function __get($name) {} 

注意,返回類型這裏是SimpleXMLElement[],即,「SimpleXMLElement對象的數組」。這使得它可以正確地自動完成,如果你喜歡寫東西$node->childName[0]->grandChild[0]->asXML(),但如果你使用的$node->childName->grandChild->asXML()

這速記形式可以被歸類爲在IDE中的錯誤,並且是filed in their public tracker as WI-15760。存根應該將返回類型__get()聲明爲SimpleXMLElement,並且還聲明implements ArrayAccessoffsetGet()也返回SimpleXMLElement。使用我自己的虛擬課堂進行測試表明,這可以正確自動完成,並可顯示[0]和簡短案例。