对于我的功能,我想设置2个如下参数,并且仅在用户要使用该参数时设置查询限制。
public function getNewsByCatId($id, $limit){
$args = array(
'fields' => array(
'news.id',
'news.title',
'news.story',
'news.image',
'news.status',
'news.added_date',
'categories.title AS news_category',
'(SELECT users.full_name FROM users WHERE id = news.added_by) as author',
),
'where' => array(
'news_category' => $id
),
'join' => 'LEFT JOIN categories on news.news_category = categories.id',
'limit' => array(0, $limit);
);
return $this->select($args);
}
如果我未在函数中传递limit值,应将什么设置为默认参数值?我可以在函数内使用if else
条件吗?示例:
public function getNewsByCatId($id, $limit){
$args = array(
'fields' => array(
'news.id',
'news.title',
'news.story',
'news.image',
'news.status',
'news.added_date',
'categories.title AS news_category',
'(SELECT users.full_name FROM users WHERE id = news.added_by) as author',
),
'where' => array(
'news_category' => $id
),
'join' => 'LEFT JOIN categories on news.news_category = categories.id',
);
if ($limit > 0) {
//condition to be applied
} else {
//condition to be applied
}
return $this->select($args);
}
答案 0 :(得分:3)
容易做到
public function getNewsByCatId(int $id, ?int $limit = 10) {
$args = [
// your original argument definition
// do NOT SET LIMIT HERE
];
if ($limit !== null && $limit > 0) {
$args['limit'] = [0, $limit];
}
return $this->select($args);
}
我已经格式化了现代PHP的代码。如果您的PHP版本不支持类型提示,短数组声明等,请更改代码(或者更好的方法是考虑升级PHP引擎)。
通过这种方式,您可以使用默认的$limit
客户端,或者可以通过null
(或整数<= 0)完全禁用该限制。
答案 1 :(得分:1)
您应该在函数定义中将默认值传递给$limit
变量。如果$limit
的默认值表示未设置,则可以避免在查询数组中应用限制条件。检查以下代码:
function getNewsByCatId($id, $limit = false){
$args = array(
'fields' => array('news.id', 'news.title', 'news.story', 'news.image', 'news.status', 'news.added_date',
'categories.title AS news_category', '(SELECT users.full_name FROM users WHERE id = news.added_by) as author'),
'where' => array(
'news_category' => $id
),
'join' => 'LEFT JOIN categories on news.news_category = categories.id',
);
if ($limit && $limit > 0 && is_numeric($limit)) { /* Only applying limit condition if you some value in it.*/
$args['limit'] = array(0, $limit);
}
return $this->select($args);
}
希望它对您有帮助。
答案 2 :(得分:-1)
将第二个参数的默认值设置为null。并在函数中添加一些条件。
public function getNewsByCatId($id, $limit=NULL){
// Your code
if($limit){
// Your code
}
}