Falou pouco e falou muita merda.
Primeiro que var não tem nada a ver com dynamic e ExpandoObject. Você só está dando ao compilador a responsabilidade de inferir o tipo daquela variável e se por um acaso ele não conseguir, o código nem sequer irá compilar.
Agora, o C# sendo uma linguagem fortemente tipada, nada mais justo e necessário do que ter um tipo dinâmico para se trabalhar com COM, JSON e DLLs externas. E isso também não tem nada a ver com com PHP, pois já existia de outras formas no Visual Basic.