Tach!
Nagut, ich weiß zwar nicht, warum solch Information als Anmerkung soweit unten versteckt sein muss, aber so sei es.
Weil sie für den Verwender nicht ganz wichtig ist. Die Verwendung entspricht ja formal auch der einer Funktion.
isset() lässt sich aber nicht als Funktion implementieren, weil es sonst den üblichen Beschränkungen von Funktionen unterworfen wäre. Beispielsweise, dass eine Notice-Fehlermeldung beim Zugriff auf die nicht vorhandene Variable erzeugt wird, und dass das Argument als Ausdruck zunächst berechnet werden sowie dessen Ergebnis übergeben würde, was im Falle einer einfachen Variable (oder Arrayelement) dessen Inhalt ist. isset() braucht aber den Namen der Variablen, um ohne diese Nebenwirkungen die Existenz überprüfen zu können. Und deshalb ist es keine Funktion, sondern wird gesondert von der PHP-Engine behandelt. Und deshalb kann man da auch keinen zu berechnenden Ausdruck angeben. Schon gar nicht so wie im Falle des OP
isset($p = $_GET['p'])
Wovon soll denn isset() die Existenz ermitteln, von $p oder von $_GET['p']? Wenn man da Ausdrücke angeben dürfte, könnten die beliebig komplex sei und eine Menge Variablen enthalten.
Was der OP stattdessen sucht, ist wohl eher empty() und PHP ab Version 5.5. Das verarbeitet seit dieser Version auch Ausdrücke und wirft ebenfalls keine Fehlermeldungen.
dedlfix.