давайте по пунктам.
1. В РНР нет строгой типизации. Это факт.
2. Из п. 1 следует, что типы будут приводиться автоматически в некоторых случаях.
3. Строка приводится к числу именно так: (int)«PHP»; // 0
(мне это кажется логичным)
4. Чтобы сравнить два разных типа, нужно один привести к другому. С этим тоже глупо спорить.
5. Вот тут, возможно, неочевидный момент — в РНР для этого строка приводится к числу. Это описано в документации.