2011-04-10 101 views
0

好的,所以我有這個功能。我已經把它剝離並刪除了所有的html。將函數轉換爲OO方法

if($session->power == 'admin'){ 
    $adminMenu= $user->admin_menu; 
    foreach($adminMenu as $key => $value):{ 
     echo $value; echo $key; 
    } endforeach; 
} 

我試圖變相成一種面向對象的方法,這一點,這是迄今爲止我的方法:

用戶類

public function get_menu(){ 
global $session; 
$user_status = $session->power; 
$adminMenus = $this->admin_menu; // associate array ($key => value) 
$menu = array(); 
if($user_status == 'admin'){ 
    foreach($adminMenus as $adminMenu):{ 
     $menu = array($adminMenu); 
     return array_shift($menu); 
    } endforeach; 
} 

在顯示文件然後

while($user->get_menu()){ 
echo $user->get_menu(); 
} 

我知道t他完全錯誤 - 因爲它不起作用。所以你可以幫助我使它面向對象。

+1

您正在使用'foreach'以一種不可思議的方式。就像你正在結合正常的塊風格和替代語法。這很混亂。只要刪除':'和'endforeach;'(或者括號'{}')。 – 2011-04-10 00:20:55

+0

也加入@Felix Kling的評論,這應該會導致一個致命的錯誤:'echo $ value echo $ key; ',以及foreach中的返回使foreach語句冗餘 – RobertPitt 2011-04-10 00:36:20

回答

0
public function get_menu(){ 
    global $session; 
    $user_status = $session->power; 
    $adminMenus =$this->admin_menu; // associate array($key => value) 
    if($user_status == 'admin') 
    { 
     foreach($adminMenus as $key => $value): 
     { 
     echo $key . $value; 
     } 
    } 
} 

然後在顯示文件

$user->get_menu(); 
+1

至少可以修復他的語法問題:) – RobertPitt 2011-04-10 00:37:54

+1

也許我還建議我們通過將$ session作爲參數傳遞給某個地方來擺脫全局?當我在OO代碼中看到全局時,我的脖子後面的頭髮站起來 – 2011-04-10 01:08:31

+0

確定這是有效的,但是它是一個關聯數組,因此您需要通過foreach中的鍵和值進行循環。你能解釋爲什麼你使用回聲,而不是返回? – dgamma3 2011-04-10 01:08:42