Булево значение TRUE преобразуется в строку «1». Boolean FALSE преобразуется в "" (пустая строка).
Почему FALSE не выбрал значение «0»?
Если вы передаете int, а затем в строку, то печатает 0.
$x=false; print (string)(int)$x;
Печать 0. Вы можете, конечно, опустить строковый тип, как это сделано в печати.