我的php类中的其他参数

时间:2013-11-21 23:35:49

标签: php oracle api foreach

我正在尝试向get_lists方法添加一个新变量(参数)`$ sugg_only = false'。现在我根据用户是否有登录令牌来提取所有数据。这很好,并返回自定义列表中的数据数组。

如果“建议”列设置为Y,我正在尝试从shopping_list_name返回内容。这样,如果他们没有自定义列表,它将提取我们提供的建议列表。

以下是表中所列内容的完整列表:

ID SHOPPING_LIST_NAME                                 S SEQUENCE

  1 test amnaik shopping list                          N
  2 bonner shopping list                               N
  3 793d7384fa4fa247d6fae07db104147d0a2dad6e           Y
  4 kj's shopping list                                 N
  5 kj's shopping list from 1384201636                 N
  6 kj's shopping list from 1384201659                 N
  7 kj's shopping list from 1384202055                 N
  8 kj's shopping list from 1384202089                 N
  9 kj's shopping list from 1385064064                 N
 10 kj's shopping list from 1385064145                 N
 11 kj's shopping list from 1385064150                 N
 12 kj's shopping list from 1385064257                 N
 13 kj's shopping list from 1385064825                 N
 14 kj's shopping list from 1385064857                 N

所以,正如你所看到的,只有一个(非常有名的)购物清单被设置为建议。

// Get a user's shopping lists
    public function get_lists($clobber = false, $sugg_only = false) {
        if ($this->UserShoppingList != null && !$clobber) {
            return $this->UserShoppingList;

    } else if ($this->get_sign_in_token()) {
        global $db;

        $vars = array();
        $vars[] = array(':i_sign_in_token', strtoupper($this->get_sign_in_token()));

        $rows = $db->get_function_ref_cursor('custom.japi_shopping_list.get_lists_for_shopper(:i_sign_in_token)', $vars);

        // Turn the rows into objects and get their items.
        foreach ($rows as $row) {
            $list = new UserShoppingList(null, $this->sign_in_token);
            $list->get_from_array($row);
            $list->get_items();
            $this->UserShoppingList[] = $list;
        }

        return $this->UserShoppingList;
    } else {
        return false;
    }
}

api页面:

   if(!isset($_GET['token']) && !isset($_GET['suggested_only'])) {
        die('Must pass-in either a \'token\' or \'suggested_only\' flag');
    }

    if(isset($_GET['token'])) {
        $shopper = new Shopper($_GET['token'])
        or die('Could not instantiate a new Shopper from the \'token\' passed-in');

        $array = array();
        $shopper_lists = $shopper->get_lists(true);
        foreach ($shopper_lists as $list) {
             $array[] = $list->json();
        }

          echo json_encode($array);        
//        echo json_encode($shopper_lists);
    }

我是否可能正在编写另一个foreach循环并且只包括如果$ sugg_only等于TRUE会发生什么?

在我的api页面底部添加这样的东西??:

if(isset($_GET['suggested_only']) && $_GET['suggested_only'] == 'true') 
    {


    }

非常感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

在处理数组时,我通常会优先于isset设置array_key_exists('suggested_only',$ _GET)($ _ GET ['suggested_only'])

如果与数据的执行没有什么不同,只是你选择的数据不同,我会把你的陈述放在API页面的顶部,而不是底部。

这样,你的IF语句可以定义一个标志,当你不可避免地调用$ shopper-> get_lists()

你可以这样做:

$suggestions = false;
$clobber = false;
if(isset($_GET['suggested_only']) && $_GET['suggested_only'] == 'true') 
{
    $suggestions = true;

}

...

$shopper_lists = $shopper->get_lists($clobber, $suggestions);

这样,您就不会真正重复获取所需数据的代码。

无论其

当涉及到它时,如果你添加一系列类型的列表,那该怎么办?您不希望向get_lists函数添加标志和另一个变量。这会变得一团糟。

最好有一个像$ _GET ['type']这样的变量,并按如下方式切换:

switch($_GET['type'])
{
   case 'thingo':
       $shopper->get_lists('thingo');
       //Or you could use $shopper->get_thingo_list();
       break;
   case 'suggestion':
       $shopper->get_lists('suggestion');
       //Or you could use $shopper->get_suggestion_list();
       break;
   case 'list':
       $shopper->get_lists('list');
       //Or you could use $shopper->get_list();
       break;
   default:
       //No type exists here
   break;
}

有些人可能会建议只将$ _GET变量直接传递给你的函数,但出于安全考虑,我总是有点紧张。