$a ?? 0 等同于 isset($a) ? $a : 0

$a ?: 0 等同于 $a ? $a : 0

empty: 判断一个变量是否为空(null、false、00、0、’0′、』这类,都会返回true)

isset: 判断一个变量是否设置(值为false、00、0、’0′、』这类,也会返回true)

示例

// 定义之前
print_r($name ?? 'Tom');
// Tom

print_r($name ?: 'Jack');
// Jack
// Undefined variable: name


// 定义之后
$name = '';

print_r($name ?? 'Tom');
// ''

print_r($name ?: 'Jack');
// Jack


参考
PHP7 引入的“??” 和“?:”的区别