Doubles это floats в РНР и они легко присваиваются как longs, поскольку их значение содержится также непосредственно в union. Член в zval.value-контейнере это dval; соответствующий тип это IS_DOUBLE.