Explorar el Código

Accept DatetimeInterface in fromDatetime

Bo Yang hace 7 años
padre
commit
39159c89f1
Se han modificado 2 ficheros con 14 adiciones y 12 borrados
  1. 6 11
      php/ext/google/protobuf/message.c
  2. 8 1
      php/ext/google/protobuf/protobuf.c

+ 6 - 11
php/ext/google/protobuf/message.c

@@ -1123,21 +1123,16 @@ PHP_METHOD(Timestamp, fromDateTime) {
   zval* datetime;
   zval member;
 
-  if (zend_parse_parameters(
-          ZEND_NUM_ARGS() TSRMLS_CC, "z", &datetime) == FAILURE) {
-    return;
-  }
-
-  zend_class_entry* ce = Z_OBJCE_P(datetime);
-  PHP_PROTO_CE_DECLARE datetime_ce;
-  if (php_proto_zend_lookup_class("\\Datetime", 9, &datetime_ce) ==
-      FAILURE) {
+  PHP_PROTO_CE_DECLARE date_interface_ce;
+  if (php_proto_zend_lookup_class("\\DatetimeInterface", 18,
+                                  &date_interface_ce) == FAILURE) {
     zend_error(E_ERROR, "Make sure date extension is enabled.");
     return;
   }
 
-  if (!instanceof_function(PHP_PROTO_CE_UNREF(datetime_ce), ce TSRMLS_CC)) {
-    zend_error(E_USER_ERROR, "Expect Datetime.");
+  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O", &datetime,
+                            date_interface_ce) == FAILURE) {
+    zend_error(E_USER_ERROR, "Expect DatetimeInterface.");
     return;
   }
 

+ 8 - 1
php/ext/google/protobuf/protobuf.c

@@ -182,8 +182,15 @@ zend_function_entry protobuf_functions[] = {
   ZEND_FE_END
 };
 
+static const zend_module_dep protobuf_deps[] = {
+  ZEND_MOD_OPTIONAL("date")
+  ZEND_MOD_END
+};
+
 zend_module_entry protobuf_module_entry = {
-  STANDARD_MODULE_HEADER,
+  STANDARD_MODULE_HEADER_EX,
+  NULL,
+  protobuf_deps,
   PHP_PROTOBUF_EXTNAME,     // extension name
   protobuf_functions,       // function list
   PHP_MINIT(protobuf),      // process startup