如何在没有isset()的情况下快速判断和分配?

时间:2014-10-21 01:18:52

标签: php ternary-operator isset

我厌倦了使用代码:

$blog = isset($_GET['blog']) ? $_GET['blog'] : 'default';

但我无法使用:

$blog = $_GET['blog'] || 'default';

有没有办法在不使用isset()的情况下执行此操作?

4 个答案:

答案 0 :(得分:4)

您必须等待下一版本的PHP才能获得coalesce operator

// Uses $_GET['user'] if it exists -- or 'nobody' if it doesn't
$username = $_GET['user'] ?? 'nobody';

// Loads some data from the model and falls back on a default value
$model = Model::get($id) ?? $default_model;

答案 1 :(得分:1)

编写辅助函数。

function arrayValue($array, $key, $default = null)
{
    return isset($array[$key]) ? $array[$key] : $default;
}

用法:

$blog = arrayValue($_GET, 'blog');

答案 2 :(得分:0)

没有比这更简短的方法。您可以创建一个处理$ _POST和$ _GET变量的类,并在您调用博客时使用它。

示例:

$ blog =输入:: put("博客");

输入类将有一个静态方法,它将确定何时输入具有$ _POST和$ _GET或null值。

答案 3 :(得分:0)

您可以编写自定义帮助程序:

function get($name, $default=null){
    return isset($_GET[$name]) ? $_GET[$name] : $default;
}

$blog = get('blog', 'default');

或者,你有filter extension,例如:

$blog = filter_input(INPUT_GET, 'blog') ?: 'default';

它没有明显缩短,但允许进一步验证和消毒(并且在自定义函数中包装也很简单。)