|  | @@ -904,6 +904,39 @@ PHP_METHOD(Message, whichOneof) {
 | 
	
		
			
				|  |  |    RETURN_STRING(field ? upb_fielddef_name(field) : "");
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Message::hasOneof()
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * Returns the presence of the given oneof field, given a field number. Called
 | 
	
		
			
				|  |  | + * from generated code methods such as:
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + *    public function hasDoubleValueOneof()
 | 
	
		
			
				|  |  | + *    {
 | 
	
		
			
				|  |  | + *        return $this->hasOneof(10);
 | 
	
		
			
				|  |  | + *    }
 | 
	
		
			
				|  |  | + *
 | 
	
		
			
				|  |  | + * @return boolean
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +PHP_METHOD(Message, hasOneof) {
 | 
	
		
			
				|  |  | +  Message* intern = (Message*)Z_OBJ_P(getThis());
 | 
	
		
			
				|  |  | +  zend_long field_num;
 | 
	
		
			
				|  |  | +  const upb_fielddef* f;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (zend_parse_parameters(ZEND_NUM_ARGS(), "l", &field_num) == FAILURE) {
 | 
	
		
			
				|  |  | +    return;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  f = upb_msgdef_itof(intern->desc->msgdef, field_num);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  if (!f || !upb_fielddef_realcontainingoneof(f)) {
 | 
	
		
			
				|  |  | +    php_error_docref(NULL, E_USER_ERROR,
 | 
	
		
			
				|  |  | +                     "Internal error, no such oneof field %d\n",
 | 
	
		
			
				|  |  | +                     (int)field_num);
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  RETVAL_BOOL(upb_msg_has(intern->msg, f));
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  |   * Message::readOneof()
 | 
	
		
			
				|  |  |   *
 | 
	
	
		
			
				|  | @@ -1014,6 +1047,7 @@ static zend_function_entry Message_methods[] = {
 | 
	
		
			
				|  |  |    PHP_ME(Message, mergeFrom,             arginfo_mergeFrom, ZEND_ACC_PUBLIC)
 | 
	
		
			
				|  |  |    PHP_ME(Message, readWrapperValue,      arginfo_read,      ZEND_ACC_PROTECTED)
 | 
	
		
			
				|  |  |    PHP_ME(Message, writeWrapperValue,     arginfo_write,     ZEND_ACC_PROTECTED)
 | 
	
		
			
				|  |  | +  PHP_ME(Message, hasOneof,              arginfo_read,      ZEND_ACC_PROTECTED)
 | 
	
		
			
				|  |  |    PHP_ME(Message, readOneof,             arginfo_read,      ZEND_ACC_PROTECTED)
 | 
	
		
			
				|  |  |    PHP_ME(Message, writeOneof,            arginfo_write,     ZEND_ACC_PROTECTED)
 | 
	
		
			
				|  |  |    PHP_ME(Message, whichOneof,            arginfo_read,      ZEND_ACC_PROTECTED)
 |