2013-05-31 40 views
1

我來自Java世界並且在PHP中嘗試相同的「簡單」事情。Eclipse不能解析php數組中的對象類型

我有一個不可變的僞數據對象:

class BugTimeData { 

    private $bugid = ""; 
    private $startDate = ""; 
    private $resolvedDate = ""; 
    private $status = ""; 
    private $weekends = ""; 

    function __construct($bugid, $startDate, $resolvedDate, $status) { 
     $this->bugid = $bugid; 
     $this->startDate = $startDate; 
     $this->resolvedDate = $resolvedDate; 
     $this->status = $status; 
    } 

    function getBugId() { 
     return $this->bugid; 
    } 

    function getStartDate() { 
     return $this->startDate; 
    } 

    function getResolvedDate() { 
     return $this->resolvedDate;  
    } 

    function getStatus() { 
     return $this->status; 
    } 

    function getWeekendsBetween() { 
     return $this->weekends; 
    } 
} 

甲從這個類添加一個對象到一個數組:

$data= new BugTimeData($a, $b, $c, $d); 
array_push($content, $data); 

欲遍歷這個陣列,讀出對象,並訪問他們的方法:

foreach($time_prio_bug_content as $key => $value) { 
    var_dump($value->getStatus()); 
} 

This Works!但是我的IDE(Eclipse)並不知道$ value是BugTimeData。所以我無法以簡單的方式訪問公共方法。

問題: 如何將$ value轉換爲BugTimeData類型的對象?

在Java中,這是很容易的(因爲我並不需要一個造型,因爲創建一個數組時,我可以定義對象的類型)和直線前進。所以我想知道爲什麼在Php中這是不可能的?

+0

'$ value'已經是一個對象。 – BlitZ

+0

@CORRUPT當然,但不是來自BugTimeData類型。 – sk2212

+1

PHP不支持您嘗試在本地執行的操作。我使用的IDE,PhpStorm,允許您使用註釋來聲明任何變量的類型(類或原始類型)。 – leftclickben

回答

3

這只是你的IDE而不是PHP的問題。如果您添加了適當的註釋類型提示,任何不錯的IDE都會接受。舉例來說,定義該數組包含特定類型的對象:

/** @var BugTimeData[] $array */ 
$array = array(); 

如果數據來自一個函數或方法,適當@return文檔標記添加到該方法的簽名。最壞的情況下,標誌着循環內的變量:

foreach($time_prio_bug_content as $key => $value) { 
    /** @var BugTimeData $value */ 
    var_dump($value->getStatus()); 
} 
+0

好吧...似乎與Eclipse一起工作。太好了!我不明白爲什麼強制轉換爲object,int,binary等都是可能的,因爲PHP是動態類型語言。然而......問題解決了! – sk2212

+0

@ sk2「動態輸入」並不意味着「輸入類型」。 PHP和Java一樣,但是類型是通過上下文來推斷的,不需要在任何地方顯式聲明(當然'$ foo ='bar'是一個字符串,不需要聲明它),並根據需要隱式轉換(當然'$ foo + $ bar'使用兩個整數,不需要明確地轉換它們)。唯一的區別就是你不需要重複地輸入'String string ='string''或'string.toNumber()'。 – deceze

-2

你不能。因爲PHP實際上是無類型的,並且在閱讀代碼時無法知道某個變量是什麼類型。它僅在運行時纔可能。

+1

...除非您的IDE通過註釋支持它... – leftclickben

-1

作爲替代註釋我相信你能type hint這樣:

var $value = new BugTimeData; // this tells the IDE which type the variable will hold from here on 
foreach($time_prio_bug_content as $key => $value) { 
    var_dump($value->getStatus()); 
} 

或實現投用類型提示參數類方法和返回對象(請參閱link

+0

類型提示用於參數,不適用於返回值。它可能會在php 6中添加 - 它在這裏是RFC形式:https://wiki.php。net/rfc/returntypehint2 –

+0

@BobGregor你完全錯過了這一點。我的代碼(和鏈接)並不意味着鍵入提示函數返回值。相反,在使用它之前,顯式聲明變量'$ value'。我正在幫助IDE瞭解它的類型將在下面的代碼中。 – zsawyer

+0

啊!現在我明白了您的觀點 - 您可能希望在代碼示例中添加註釋,以表明$ value元素是IDE的臨時提示。我過去用IDE做了這個黑客攻擊。 –