guarda che quello e' un fatal error ...
E' un fatal error SOLO sulla chiamata $p->__toString();, NON echo(new pippo);

Questo avviene perchè $p->__toString(); è un tentativo di chiamata ad un metodo privato, mentre tramite echo(new pippo); il metodo magico __toString() viene richiamato internamente da PHP e funziona come ci si aspetta. Ecco il motivo per cui, anche se lo definisci static, funziona nel costrutto echo(new pippo);

Come da manuale "You cannot have functions with these names in any of your classes unless you want the magic functionality associated with them.".

Perchè non dovrebbe essere possibile?
Perchè ritieni un "non senso" poter definire una classe ed una costante con lo stesso identficatore?