是否有 shorthand 检查参数是否存在且大于零的方法?

Is there a shorthand way of checking if parameter exists and greater than zero?

我正在尝试检查是否提供了参数并通过了条件,但看起来很冗长。这是我的:

if (isset($request['limit']) && is_numeric($request['limit']) && (int)$request['limit'] > 0) {
    $post_params['posts_per_page'] = (int)$request['limit'];
}

我认为这是安全的,但有没有更简洁的方法来实现这一点,同时仍然保持安全?

不确定你认为这是速记...

$correct = @(preg_match('/^[1-9]\d*$/', $request['limit']));

“@”会抑制这句话中的任何警告,但你能得到的唯一警告是该变量未定义,因此受到控制。

使用filter_inputfilter_var

if (isset($request['limit']) {
    $var = filter_var($request['limit'], FILTER_VALIDATE_INT, ['min_range' => 0]);
    if ($var) {
       $post_params['posts_per_page'] = $var;
    }
}

但理想情况下,您会在生成 $request 数组时执行此操作。

$request = [
    'limit' => filter_input(INPUT_GET, 'limit', FILTER_VALIDATE_INT, ['min_range' => 0])
];
if ($request['limit']) {
    $post_params['posts_per_page'] = $var;
}

您可以使用

if (isset($request['limit']) and intval($request['limit']) > 0) {
    $post_params['posts_per_page'] = (int)$request['limit'];
}

您可以使用 preg_match 并查看第一个字符是否为 [1-9] 然后是任何数字。
这将不允许零值或空值或字符串。

您可以添加一个三元 isset,但我无法做到比它更短。

if(preg_match("/^[1-9]\d*$/", (isset($str) ? $str : 0))){
    // Something
}