Это работает:
!function_exists('testfunc') and include("testfunc.php");
Это сообщит об синтаксической ошибке:
!function_exists('testfunc') and unset($q);
Разве они не одно и то же?
unset не имеет возвращаемого значения и в соответствии с http://php.net/manual/en/function.include.php вы можете «вернуться» из включенного файла (так что это не пусто: P)
... Я почти уверен, что это то, что
unset void, не возвращает значения.
include может возвращать значение, которое является возвращаемым значением, определенным в включаемом файле. может быть bool, может быть что-то еще. В общем, не рекомендуется использовать его таким образом.