我們假設我們有一個PHP類Page
,它在CMS中生成PHP Page
對象。在課堂內部,我們有一個名爲GetPages()
的函數,它爲系統中的所有頁面返回一個Page
對象的數組。循環訪問PHP對象
如果我們要輸出這些在一個表中,我們可以這樣做:
foreach(Page::GetPages() as $page)
{
echo $page->title.'<br />';
}
這是一個非常乾淨的解決方案,但我們主要進行兩個循環,當我們只需要運行一旦。在處理客戶委託的定製CMS時,我遇到了這個問題,他們現在希望我們對其進行檢修(僅僅是因爲速度)。
我在想,這可能是更好的從類中刪除GetPages()
功能,做這樣的事情的管理界面上:
$pages = "SELECT `id` FROM `ig_pages`";
$result = Database::Singleton()->Query($pages);
while($page = $result->fetch_object())
{
$this_page = new Page($page->id);
echo $this_page->title.'<br />';
}
顯然從一個角度架構的角度,功能確實應該包括在Page
類中,但我對循環有效地運行兩次有一些擔憂。任何人都可以提出一個更好的方法嗎?
如果我擔心速度 - 我的第一個停靠點是數據庫和一堆['EXPLAIN'](http://dev.mysql.com/doc/refman/5.0/en/explain.html ) - 在那裏做。 –
我不認爲運行foreach迭代數組會花費你很多(根本)在速度方面。當檢測速度的應用程序,你的第一個重點應該是數據庫。 Foreach在計算上非常便宜。 – Andrew
不要盲目追求,而是應用程序的配置文件來查看瓶頸是什麼。只是改變隨機的東西是錯誤的方法。 – PeeHaa