Das ist eine der Haupteigenschaften von PHP, dass es in der Regel stillschweigend automatisch alles in jede Richtung castet.
Dass da viel automatisch gecastet wird, ist mir schon lange klar - nur so einen Fall auszuprobieren oder diesbezüglich nachzuschlagen kam mir bisher nicht in den Sinn.
Das stammt auch aus Zeiten, als es noch kein dediziertes true und false gab und man stattdessen 1 und 0 verwendete.
Das ist einleuchtend, meinetwegen auch noch 0 und -1, aber dass die nicht definierte Konstante "FAIL" z.B. auch nach true validiert ist etwas komisch - ich hätte erwartet, dass nicht gesetzte Variablen oder nicht definierte Konstanten nach false gecastet werden.
Dieser Mechanismus macht auch vor Arrays und Objekten nicht halt. Man kann dann recht einfach
Auch das ist mir klar.