$builtin ) { if ( array_key_exists( $k, $factory ) ) { $v = self::same_kind( $builtin, $factory[ $k ] ); if ( null !== $v ) { $defaults[ $k ] = $v; } } } return $defaults; } /** * The factory value when it is the same kind as the built-in one, else null. * * @param mixed $builtin Built-in value. * @param mixed $value Factory value. * @return mixed|null */ private static function same_kind( $builtin, $value ) { if ( is_bool( $builtin ) ) { return is_bool( $value ) ? $value : null; } if ( is_array( $builtin ) ) { return is_array( $value ) ? $value : null; } if ( is_int( $builtin ) ) { return is_numeric( $value ) ? (int) $value : null; } if ( is_float( $builtin ) ) { return is_numeric( $value ) ? (float) $value : null; } if ( is_string( $builtin ) ) { return is_string( $value ) || is_numeric( $value ) ? (string) $value : null; } return null === $builtin ? $value : null; } }