2011-04-10 81 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