A ver, un NOTICE es un error, un mejor dicho la evidencia de que cometes una mala practica.
Lo correcto es siempre verificar la existencia de una variable antes de usarla ¿no te parece lógico?
Y bueno, un if() no es capaz de ello, por eso hay construcciones tipo isset() y empty().
El asunto es que isset() y empty() trabajan únicamente con variables y no con expresiones, que justamente es lo que dices de "evaluando otra función da error".
Se te limitas a comprobar variables es correcto usar isset() o empty(), si intentas comparar expresiones ya no.
Por cierto, las versiones más recientes de PHP ya eliminaron esta limitación y permiten evaluar expresiones y no sólo variables.
Consulta el manual.