2012-03-09 71 views
2

我有一個奇怪的問題。我正在學習PHP(習慣用Java編程),我正在嘗試做一件簡單的事情。我有一個做了這樣的DAO方法:使用從PHP函數返回的對象數組

while (oci_fetch($parse)) { 
     $stats = new Stats(); 
     $stats->setId($id); 
     $stats->setName($name); 
     $stats->setEmail($email); 
     $stats->setGender($gender); 
     $stats->setBirthday($birthday); 
     $statslist[] = $stats; 
    } 

    return $statslist; 

而且我有一個使用此功能(稱爲getById)另一個PHP文件,作爲測試,像這樣:

$statsdao = new StatsDAO(); 
    $statslist[] = $statsdao->getById(1); 
    foreach ($statslist as $stat) { 
     echo $stat->getName(); 
    } 

這看起來很簡單足夠了:DAO返回一個數組,我的另一個文件讀取返回的Stats數組並打印它。但我收到此錯誤消息,而不是:

Fatal error: Call to a member function getName() on a non-object in /var/www/socializi/interfaceusuario/index.php on line 25

奇怪的是:如果我叫DAO的getById函數內部foreach循環,它打印好嗎,但是當我調用該函數從外部給它分配到另一個數組,它不會將數組的內容識別爲對象。

我在這裏做錯了什麼? 謝謝!

回答

3

試試看這樣的:

$statsdao = new StatsDAO(); 
    $statslist = $statsdao->getById(1); 
    foreach ($statslist as $stat) { 
     echo $stat->getName(); 
    } 

您添加[]是提供服務罷了然後把數組另一個數組內從而給你

$statslist[0][0]->getName(); //would only work on php 5.4 with this syntaxe but it shoes the idea. 

一個層次過深。

換言之的foreach的第一個內也將修復它,但它的醜陋和服務無關:

$statsdao[] = new StatsDAO(); 
    $statslist = $statsdao->getById(1); 
    foreach ($statslist as $stats) { 
     foreach ($stats as $stat) { 
      echo $stat->getName(); 
     } 
    } 
+0

嵌套的foreach工作得很好,非常感謝!你會碰巧知道爲什麼會發生這種情況?我的意思是,如果我返回一個數組,我不明白爲什麼我得到一個數組內的數組... – 2012-03-09 18:03:17

0

你不需要括號。當設置$ statslist。通過放置括號,你告訴PHP你想創建一個新的數組,並將第一個鍵(0)設置爲返回值getById()。這導致了一組數組。你實際上並不想要那樣。

$statsdao = new StatsDAO(); 
$statslist = $statsdao->getById(1); 
foreach ($statslist as $stat) { 
    echo $stat->getName(); 
} 
0

的RESON是所使用$statslist[] = $statsdao->getById(1);,它創建了一個$ statslist陣列的第一元素中的結果。所以放下[]。

您可以激活error_reporting(E_ALL);避免這樣的問題。這會告訴你,你正試圖添加一個非數組變量的元素。

編輯: 我錯誤地記得PHP提供此通知,如果數組不存在。但似乎方括號表示法$array[]會創建一個數組$ array,如果它不存在的話。

error_reporting(E_ALL);仍處於發展環境是一個好主意,但。幫助您避免錯誤的來源。

+0

第二部分是錯誤的。他有錯誤顯示,他的帖子中出現錯誤!他也不會追加任何他稱之爲非客體方法的東西:) – Iznogood 2012-03-09 17:37:05

+0

@Iznogood他會收到通知或警告,指出$ statslist不是數組。 – Crashspeeder 2012-03-09 17:42:18

+0

@Crashspeeder這是一個數組!一個元素數組! – Iznogood 2012-03-09 17:43:38