How to make quick judgement and assignment without

2019-02-20 22:04发布

I am tired of using code like:

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

but I can't use:

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

Is there any way to do this without using isset()?

4条回答
叛逆
2楼-- · 2019-02-20 22:48

You have to wait for the next version of PHP to get the 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;
查看更多
淡お忘
3楼-- · 2019-02-20 22:51

Write a helper function.

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

Usage:

$blog = arrayValue($_GET, 'blog');
查看更多
beautiful°
4楼-- · 2019-02-20 22:59

You can just write a custom helper:

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

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

Alternatively, you have the filter extension, e.g.:

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

It's not noticeably shorter but allows further validation and sanitisation (and it's also trivial to wrap in a custom function).

查看更多
霸刀☆藐视天下
5楼-- · 2019-02-20 23:00

No there is no shorter way than that. You can create a class that handles the $_POST and $_GET variables and just user it whenever you call the blog.

Example:

$blog = Input::put("blog");

The input class will have a static method which will determine when input is either have a $_POST and $_GET or a null value.

查看更多
登录 后发表回答