Как известно любое из значений нижеуказанного массива «пустое» и что для 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 отработает «тихо».