Есть ли разница между empty и отрицанием в PHP?

Как известно любое из значений нижеуказанного массива «пустое» и что для empty, что для отрицания вернёт false и выдаст предупреждение для обоих проверок на несуществующую переменную:

$data = [
    "",
    0,
    0.0,
    "0",
    null,
    false,
    [],
    $v,
];

foreach($data as $d) {
    echo 'empty= ' . (empty($d) ? 1 : 0) . ' | ' . ' negative= ' . (!$d ? 1 : 0) . PHP_EOL;
}

<b>Notice</b>:  Undefined variable: v in <b>[...][...]</b> on line <b>11</b><br />
empty= 1 |  negative= 1
empty= 1 |  negative= 1
empty= 1 |  negative= 1
empty= 1 |  negative= 1
empty= 1 |  negative= 1
empty= 1 |  negative= 1
empty= 1 |  negative= 1
empty= 1 |  negative= 1

Однако есть один нюанс, когда проверка идёт не элемента массива, а самой переменной. Пояснения ниже.

echo empty($v) . PHP_EOL;
1
echo !$v . PHP_EOL;
<br />
<b>Notice</b>:  Undefined variable: v in <b>[...][...]</b> on line <b>3</b><br /> (только для второй проверки)
1

Т.е. отрицание несуществующей переменной в php 7.0.1 и позднее выдаст предупреждение. А empty отработает «тихо».