@@ -215,7 +215,13 @@ bool php_phongo_bson_visit_binary(const bson_iter_t *iter ARG_UNUSED, const char
215
215
TSRMLS_FETCH ();
216
216
217
217
if (v_subtype == 0x80 && strcmp (key , PHONGO_ODM_FIELD_NAME ) == 0 ) {
218
+ #if PHP_VERSION_ID >= 70000
219
+ zend_string * zs_classname = zend_string_init ((char * )v_binary , v_binary_len , 0 );
220
+ zend_class_entry * found_ce = zend_fetch_class (zs_classname , ZEND_FETCH_CLASS_AUTO |ZEND_FETCH_CLASS_SILENT TSRMLS_CC );
221
+ zend_string_free (zs_classname );
222
+ #else
218
223
zend_class_entry * found_ce = zend_fetch_class ((char * )v_binary , v_binary_len , ZEND_FETCH_CLASS_AUTO |ZEND_FETCH_CLASS_SILENT TSRMLS_CC );
224
+ #endif
219
225
220
226
if (found_ce && PHONGO_IS_CLASS_INSTANTIATABLE (found_ce ) && instanceof_function (found_ce , php_phongo_persistable_ce TSRMLS_CC )) {
221
227
((php_phongo_bson_state * )data )-> odm = found_ce ;
@@ -487,9 +493,17 @@ bool php_phongo_bson_visit_document(const bson_iter_t *iter ARG_UNUSED, const ch
487
493
488
494
MAKE_STD_ZVAL (obj );
489
495
object_init_ex (obj , state .odm ? state .odm : state .map .document );
496
+ #if PHP_VERSION_ID >= 70000
497
+ zend_call_method_with_1_params (obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state .zchild );
498
+ #else
490
499
zend_call_method_with_1_params (& obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state .zchild );
500
+ #endif
491
501
add_assoc_zval (retval , key , obj );
502
+ #if PHP_VERSION_ID >= 70000
503
+ zval_ptr_dtor (state .zchild );
504
+ #else
492
505
zval_ptr_dtor (& state .zchild );
506
+ #endif
493
507
break ;
494
508
}
495
509
@@ -528,9 +542,17 @@ bool php_phongo_bson_visit_array(const bson_iter_t *iter ARG_UNUSED, const char
528
542
529
543
MAKE_STD_ZVAL (obj );
530
544
object_init_ex (obj , state .map .array );
545
+ #if PHP_VERSION_ID >= 70000
546
+ zend_call_method_with_1_params (obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state .zchild );
547
+ #else
531
548
zend_call_method_with_1_params (& obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state .zchild );
549
+ #endif
532
550
add_assoc_zval (retval , key , obj );
551
+ #if PHP_VERSION_ID >= 70000
552
+ zval_ptr_dtor (state .zchild );
553
+ #else
533
554
zval_ptr_dtor (& state .zchild );
555
+ #endif
534
556
break ;
535
557
}
536
558
@@ -571,10 +593,17 @@ int php_phongo_is_array_or_document(zval **val TSRMLS_DC) /* {{{ */
571
593
unsigned long idx = 0 ;
572
594
int hash_type = 0 ;
573
595
HashPosition pos ;
596
+ #if PHP_VERSION_ID >= 70000
597
+ zend_string * zs_key ;
598
+ #endif
574
599
575
600
zend_hash_internal_pointer_reset_ex (ht_data , & pos );
576
601
for (;; zend_hash_move_forward_ex (ht_data , & pos )) {
602
+ #if PHP_VERSION_ID >= 70000
603
+ hash_type = zend_hash_get_current_key_ex (ht_data , & zs_key , & index , & pos );
604
+ #else
577
605
hash_type = zend_hash_get_current_key_ex (ht_data , & key , & key_len , & index , 0 , & pos );
606
+ #endif
578
607
if (hash_type == HASH_KEY_NON_EXISTENT ) {
579
608
break ;
580
609
}
@@ -604,17 +633,25 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
604
633
zval * obj_data = NULL ;
605
634
bson_t child ;
606
635
HashTable * tmp_ht ;
607
-
636
+ #if PHP_VERSION_ID >= 70000
637
+ zend_call_method_with_0_params (object , NULL , NULL , BSON_SERIALIZE_FUNC_NAME , obj_data );
638
+ #else
608
639
zend_call_method_with_0_params (& object , NULL , NULL , BSON_SERIALIZE_FUNC_NAME , & obj_data );
640
+ #endif
609
641
610
642
if (!obj_data ) {
611
643
/* zend_call_method() failed */
612
644
return ;
613
645
}
614
646
615
647
if (Z_TYPE_P (obj_data ) != IS_ARRAY && !(Z_TYPE_P (obj_data ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (obj_data ), zend_standard_class_def TSRMLS_CC ))) {
616
- phongo_throw_exception (PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC , "Expected %s::%s() to return an array or stdClass, %s given" , Z_OBJCE_P (object )-> name , BSON_SERIALIZE_FUNC_NAME , (Z_TYPE_P (obj_data ) == IS_OBJECT ? Z_OBJCE_P (obj_data )-> name : zend_get_type_by_const (Z_TYPE_P (obj_data ))));
648
+ //TODO-PB
649
+ //phongo_throw_exception(PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC, "Expected %s::%s() to return an array or stdClass, %s given", Z_OBJCE_P(object)->name, BSON_SERIALIZE_FUNC_NAME, (Z_TYPE_P(obj_data) == IS_OBJECT ? Z_OBJCE_P(obj_data)->name : zend_get_type_by_const(Z_TYPE_P(obj_data))));
650
+ #if PHP_VERSION_ID >= 70000
651
+ zval_ptr_dtor (obj_data );
652
+ #else
617
653
zval_ptr_dtor (& obj_data );
654
+ #endif
618
655
619
656
return ;
620
657
}
@@ -631,7 +668,8 @@ void object_to_bson(zval *object, php_phongo_bson_flags_t flags, const char *key
631
668
bson_append_document_begin (bson , key , key_len , & child );
632
669
if (instanceof_function (Z_OBJCE_P (object ), php_phongo_persistable_ce TSRMLS_CC )) {
633
670
if (flags & PHONGO_BSON_ADD_CHILD_ODS ) {
634
- bson_append_binary (& child , PHONGO_ODM_FIELD_NAME , -1 , 0x80 , (const uint8_t * )Z_OBJCE_P (object )-> name , strlen (Z_OBJCE_P (object )-> name ));
671
+ //TODO-PB
672
+ //bson_append_binary(&child, PHONGO_ODM_FIELD_NAME, -1, 0x80, (const uint8_t *)Z_OBJCE_P(object)->name, strlen(Z_OBJCE_P(object)->name));
635
673
}
636
674
}
637
675
zval_to_bson (obj_data , flags , & child , NULL TSRMLS_CC );
@@ -725,10 +763,19 @@ void phongo_bson_append(bson_t *bson, php_phongo_bson_flags_t flags, const char
725
763
case IS_NULL :
726
764
bson_append_null (bson , key , key_len );
727
765
break ;
728
-
766
+ #if PHP_VERSION_ID >= 70000
767
+ case IS_TRUE :
768
+ bson_append_bool (bson , key , key_len , true);
769
+ break ;
770
+
771
+ case IS_FALSE :
772
+ bson_append_bool (bson , key , key_len , false);
773
+ break ;
774
+ #else
729
775
case IS_BOOL :
730
776
bson_append_bool (bson , key , key_len , Z_BVAL_P (entry ));
731
777
break ;
778
+ #endif
732
779
733
780
case IS_LONG :
734
781
BSON_APPEND_INT (bson , key , key_len , Z_LVAL_P (entry ));
@@ -799,15 +846,20 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
799
846
switch (Z_TYPE_P (data )) {
800
847
case IS_OBJECT :
801
848
if (instanceof_function (Z_OBJCE_P (data ), php_phongo_serializable_ce TSRMLS_CC )) {
849
+ #if PHP_VERSION_ID >= 70000
850
+ zend_call_method_with_0_params (data , NULL , NULL , BSON_SERIALIZE_FUNC_NAME , obj_data );
851
+ #else
802
852
zend_call_method_with_0_params (& data , NULL , NULL , BSON_SERIALIZE_FUNC_NAME , & obj_data );
853
+ #endif
803
854
804
855
if (!obj_data ) {
805
856
/* zend_call_method() failed */
806
857
break ;
807
858
}
808
859
809
860
if (Z_TYPE_P (obj_data ) != IS_ARRAY && !(Z_TYPE_P (obj_data ) == IS_OBJECT && instanceof_function (Z_OBJCE_P (obj_data ), zend_standard_class_def TSRMLS_CC ))) {
810
- phongo_throw_exception (PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC , "Expected %s::%s() to return an array or stdClass, %s given" , Z_OBJCE_P (data )-> name , BSON_SERIALIZE_FUNC_NAME , (Z_TYPE_P (obj_data ) == IS_OBJECT ? Z_OBJCE_P (obj_data )-> name : zend_get_type_by_const (Z_TYPE_P (obj_data ))));
861
+ //TODO-PB
862
+ //phongo_throw_exception(PHONGO_ERROR_UNEXPECTED_VALUE TSRMLS_CC, "Expected %s::%s() to return an array or stdClass, %s given", Z_OBJCE_P(data)->name, BSON_SERIALIZE_FUNC_NAME, (Z_TYPE_P(obj_data) == IS_OBJECT ? Z_OBJCE_P(obj_data)->name : zend_get_type_by_const(Z_TYPE_P(obj_data))));
811
863
812
864
break ;
813
865
}
@@ -816,8 +868,9 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
816
868
817
869
if (instanceof_function (Z_OBJCE_P (data ), php_phongo_persistable_ce TSRMLS_CC )) {
818
870
if (flags & PHONGO_BSON_ADD_ODS ) {
819
- bson_append_binary (bson , PHONGO_ODM_FIELD_NAME , -1 , 0x80 , (const uint8_t * )Z_OBJCE_P (data )-> name , strlen (Z_OBJCE_P (data )-> name ));
820
- zend_hash_del (ht_data , PHONGO_ODM_FIELD_NAME , sizeof (PHONGO_ODM_FIELD_NAME ));
871
+ //TODO-PB
872
+ //bson_append_binary(bson, PHONGO_ODM_FIELD_NAME, -1, 0x80, (const uint8_t *)Z_OBJCE_P(data)->name, strlen(Z_OBJCE_P(data)->name));
873
+ //zend_hash_del(ht_data, PHONGO_ODM_FIELD_NAME, sizeof(PHONGO_ODM_FIELD_NAME));
821
874
}
822
875
}
823
876
@@ -855,24 +908,39 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
855
908
uint64_t index = 0 ;
856
909
char numbuf [32 ];
857
910
char * key = NULL ;
911
+ #if PHP_VERSION_ID >= 70000
912
+ zend_string * zs_key ;
913
+ zval * entry ;
914
+ #else
858
915
zval * * entry ;
916
+ #endif
859
917
int hash_type = HASH_KEY_NON_EXISTENT ;
860
-
861
- hash_type = zend_hash_get_current_key_ex (ht_data , & key , & key_len , & index , 0 , & pos );
918
+ #if PHP_VERSION_ID >= 70000
919
+ #else
920
+ hash_type = zend_hash_get_current_key_ex (ht_data , & zs_key , & index , 0 , & pos );
921
+ #endif
862
922
863
923
if (hash_type == HASH_KEY_NON_EXISTENT ) {
864
924
break ;
865
925
}
866
926
927
+ #if PHP_VERSION_ID >= 70000
928
+ if ((entry = zend_hash_get_current_data_ex (ht_data , & pos )) != NULL ) {
929
+ #else
867
930
if (zend_hash_get_current_data_ex (ht_data , (void * * ) & entry , & pos ) == FAILURE ) {
931
+ #endif
868
932
break ;
869
933
}
870
934
871
935
if (hash_type == HASH_KEY_IS_STRING ) {
872
936
if (ht_data_from_properties ) {
873
937
const char * class_name ;
874
-
938
+ #if PHP_VERSION_ID >= 70000
939
+ zend_unmangle_property_name (zs_key , & class_name , (const char * * )& key );
940
+ zend_string_free (zs_key );
941
+ #else
875
942
zend_unmangle_property_name (key , key_len - 1 , & class_name , (const char * * )& key );
943
+ #endif
876
944
key_len = strlen (key );
877
945
878
946
/* Ignore non-public properties */
@@ -892,8 +960,11 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
892
960
} else {
893
961
key_len = bson_uint32_to_string (index , (const char * * )& key , numbuf , sizeof (numbuf ));
894
962
}
895
-
963
+ #if PHP_VERSION_ID >= 70000
964
+ phongo_bson_append (bson , flags & ~PHONGO_BSON_ADD_ID , key , key_len , Z_TYPE_P (entry ), entry TSRMLS_CC );
965
+ #else
896
966
phongo_bson_append (bson , flags & ~PHONGO_BSON_ADD_ID , key , key_len , Z_TYPE_PP (entry ), * entry TSRMLS_CC );
967
+ #endif
897
968
}
898
969
899
970
if (flags & PHONGO_BSON_ADD_ID ) {
@@ -910,7 +981,11 @@ PHONGO_API void zval_to_bson(zval *data, php_phongo_bson_flags_t flags, bson_t *
910
981
}
911
982
}
912
983
if (obj_data ) {
984
+ #if PHP_VERSION_ID >= 70000
985
+ zval_ptr_dtor (obj_data );
986
+ #else
913
987
zval_ptr_dtor (& obj_data );
988
+ #endif
914
989
}
915
990
}
916
991
@@ -974,8 +1049,13 @@ int bson_to_zval_ex(const unsigned char *data, int data_len, php_phongo_bson_sta
974
1049
975
1050
MAKE_STD_ZVAL (obj );
976
1051
object_init_ex (obj , state -> odm ? state -> odm : state -> map .root );
977
- zend_call_method_with_1_params (& obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state -> zchild );
1052
+ #if PHP_VERSION_ID >= 70000
1053
+ zend_call_method_with_1_params (obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state -> zchild );
1054
+ zval_ptr_dtor (state -> zchild );
1055
+ #else
1056
+ zend_call_method_with_1_params (& obj , NULL , NULL , BSON_UNSERIALIZE_FUNC_NAME , NULL , state -> zchild );
978
1057
zval_ptr_dtor (& state -> zchild );
1058
+ #endif
979
1059
state -> zchild = obj ;
980
1060
break ;
981
1061
}
@@ -1026,7 +1106,13 @@ static void apply_classname_to_state(const char *classname, int classname_len, p
1026
1106
* type = PHONGO_TYPEMAP_NATIVE_OBJECT ;
1027
1107
* type_ce = NULL ;
1028
1108
} else {
1109
+ #if PHP_VERSION_ID >= 70000
1110
+ zend_string * zs_classname = zend_string_init (classname , classname_len , 0 );
1111
+ zend_class_entry * found_ce = zend_fetch_class (zs_classname , ZEND_FETCH_CLASS_AUTO |ZEND_FETCH_CLASS_SILENT TSRMLS_CC );
1112
+ zend_string_free (zs_classname );
1113
+ #else
1029
1114
zend_class_entry * found_ce = zend_fetch_class (classname , classname_len , ZEND_FETCH_CLASS_AUTO |ZEND_FETCH_CLASS_SILENT TSRMLS_CC );
1115
+ #endif
1030
1116
1031
1117
if (!found_ce ) {
1032
1118
phongo_throw_exception (PHONGO_ERROR_INVALID_ARGUMENT TSRMLS_CC , "Class %s does not exist" , classname );
@@ -1092,7 +1178,11 @@ PHP_FUNCTION(toPHP)
1092
1178
php_phongo_bson_typemap_to_state (typemap , & state .map TSRMLS_CC );
1093
1179
1094
1180
if (!bson_to_zval_ex ((const unsigned char * )data , data_len , & state )) {
1181
+ #if PHP_VERSION_ID >= 70000
1182
+ zval_ptr_dtor (state .zchild );
1183
+ #else
1095
1184
zval_ptr_dtor (& state .zchild );
1185
+ #endif
1096
1186
RETURN_NULL ();
1097
1187
}
1098
1188
RETURN_ZVAL (state .zchild , 0 , 1 );
0 commit comments