Skip to content

Commit 6c82ec8

Browse files
authored
PHPC-2004 and PHPC-2007: Specify __toString() return type and implement Stringable (#1274)
* PHPC-2004: Specify string return type in __toString() arginfos Adding return type info to the interface methods is a small subtle BC break. Userland classes will also need to add return type info prior to PHP 8.1, where it is added automatically. However, to leave the interface methods untyped would invite an error because BSON classes cannot otherwise conform to Stringable, which has return type info. Additionally, PHP 8.2 will start raising a warning when return type info is automatically applied, so a BC break in some form is inevitable. * PHPC-2007: Explicitly implement Stringable for PHP 8+ * Fix code formatting This was missed in fe99deb
1 parent fe99deb commit 6c82ec8

21 files changed

+141
-39
lines changed

src/BSON/Binary.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,9 @@ ZEND_BEGIN_ARG_INFO_EX(ai_Binary___set_state, 0, 0, 1)
329329
ZEND_ARG_ARRAY_INFO(0, properties, 0)
330330
ZEND_END_ARG_INFO()
331331

332+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Binary___toString, 0, 0, IS_STRING, 0)
333+
ZEND_END_ARG_INFO()
334+
332335
ZEND_BEGIN_ARG_INFO_EX(ai_Binary___unserialize, 0, 0, 1)
333336
ZEND_ARG_ARRAY_INFO(0, data, 0)
334337
ZEND_END_ARG_INFO()
@@ -347,7 +350,7 @@ static zend_function_entry php_phongo_binary_me[] = {
347350
PHP_ME(Binary, __construct, ai_Binary___construct, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
348351
PHP_ME(Binary, __serialize, ai_Binary_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
349352
PHP_ME(Binary, __set_state, ai_Binary___set_state, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
350-
PHP_ME(Binary, __toString, ai_Binary_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
353+
PHP_ME(Binary, __toString, ai_Binary___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
351354
PHP_ME(Binary, __unserialize, ai_Binary___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
352355
PHP_ME(Binary, jsonSerialize, ai_Binary_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
353356
PHP_ME(Binary, serialize, ai_Binary_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -457,6 +460,10 @@ void php_phongo_binary_init_ce(INIT_FUNC_ARGS) /* {{{ */
457460
zend_class_implements(php_phongo_binary_ce, 1, php_phongo_type_ce);
458461
zend_class_implements(php_phongo_binary_ce, 1, zend_ce_serializable);
459462

463+
#if PHP_VERSION_ID >= 80000
464+
zend_class_implements(php_phongo_binary_ce, 1, zend_ce_stringable);
465+
#endif
466+
460467
memcpy(&php_phongo_handler_binary, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
461468
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(binary);
462469
php_phongo_handler_binary.clone_obj = php_phongo_binary_clone_object;

src/BSON/BinaryInterface.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,20 @@
2626
zend_class_entry* php_phongo_binary_interface_ce;
2727

2828
/* {{{ MongoDB\BSON\BinaryInterface function entries */
29+
/* clang-format off */
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_BinaryInterface___toString, 0, 0, IS_STRING, 0)
31+
ZEND_END_ARG_INFO()
32+
2933
ZEND_BEGIN_ARG_INFO_EX(ai_BinaryInterface_void, 0, 0, 0)
3034
ZEND_END_ARG_INFO()
3135

3236
static zend_function_entry php_phongo_binary_interface_me[] = {
33-
/* clang-format off */
3437
ZEND_ABSTRACT_ME(BinaryInterface, getData, ai_BinaryInterface_void)
3538
ZEND_ABSTRACT_ME(BinaryInterface, getType, ai_BinaryInterface_void)
36-
ZEND_ABSTRACT_ME(BinaryInterface, __toString, ai_BinaryInterface_void)
39+
ZEND_ABSTRACT_ME(BinaryInterface, __toString, ai_BinaryInterface___toString)
3740
PHP_FE_END
38-
/* clang-format on */
3941
};
42+
/* clang-format on */
4043
/* }}} */
4144

4245
void php_phongo_binary_interface_init_ce(INIT_FUNC_ARGS) /* {{{ */

src/BSON/DBPointer.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,9 @@ static PHP_METHOD(DBPointer, __unserialize)
236236

237237
/* {{{ MongoDB\BSON\DBPointer function entries */
238238
/* clang-format off */
239+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_DBPointer___toString, 0, 0, IS_STRING, 0)
240+
ZEND_END_ARG_INFO()
241+
239242
ZEND_BEGIN_ARG_INFO_EX(ai_DBPointer___unserialize, 0, 0, 1)
240243
ZEND_ARG_ARRAY_INFO(0, data, 0)
241244
ZEND_END_ARG_INFO()
@@ -253,7 +256,7 @@ ZEND_END_ARG_INFO()
253256
static zend_function_entry php_phongo_dbpointer_me[] = {
254257
/* __set_state intentionally missing */
255258
PHP_ME(DBPointer, __serialize, ai_DBPointer_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
256-
PHP_ME(DBPointer, __toString, ai_DBPointer_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
259+
PHP_ME(DBPointer, __toString, ai_DBPointer___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
257260
PHP_ME(DBPointer, __unserialize, ai_DBPointer___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
258261
PHP_ME(DBPointer, jsonSerialize, ai_DBPointer_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
259262
PHP_ME(DBPointer, serialize, ai_DBPointer_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -357,6 +360,10 @@ void php_phongo_dbpointer_init_ce(INIT_FUNC_ARGS) /* {{{ */
357360
zend_class_implements(php_phongo_dbpointer_ce, 1, php_phongo_type_ce);
358361
zend_class_implements(php_phongo_dbpointer_ce, 1, zend_ce_serializable);
359362

363+
#if PHP_VERSION_ID >= 80000
364+
zend_class_implements(php_phongo_dbpointer_ce, 1, zend_ce_stringable);
365+
#endif
366+
360367
memcpy(&php_phongo_handler_dbpointer, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
361368
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(dbpointer);
362369
php_phongo_handler_dbpointer.clone_obj = php_phongo_dbpointer_clone_object;

src/BSON/Decimal128.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,9 @@ ZEND_BEGIN_ARG_INFO_EX(ai_Decimal128___set_state, 0, 0, 1)
272272
ZEND_ARG_ARRAY_INFO(0, properties, 0)
273273
ZEND_END_ARG_INFO()
274274

275+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Decimal128___toString, 0, 0, IS_STRING, 0)
276+
ZEND_END_ARG_INFO()
277+
275278
ZEND_BEGIN_ARG_INFO_EX(ai_Decimal128___unserialize, 0, 0, 1)
276279
ZEND_ARG_ARRAY_INFO(0, data, 0)
277280
ZEND_END_ARG_INFO()
@@ -290,7 +293,7 @@ static zend_function_entry php_phongo_decimal128_me[] = {
290293
PHP_ME(Decimal128, __construct, ai_Decimal128___construct, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
291294
PHP_ME(Decimal128, __serialize, ai_Decimal128_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
292295
PHP_ME(Decimal128, __set_state, ai_Decimal128___set_state, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
293-
PHP_ME(Decimal128, __toString, ai_Decimal128_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
296+
PHP_ME(Decimal128, __toString, ai_Decimal128___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
294297
PHP_ME(Decimal128, __unserialize, ai_Decimal128___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
295298
PHP_ME(Decimal128, jsonSerialize, ai_Decimal128_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
296299
PHP_ME(Decimal128, serialize, ai_Decimal128_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -374,6 +377,10 @@ void php_phongo_decimal128_init_ce(INIT_FUNC_ARGS) /* {{{ */
374377
zend_class_implements(php_phongo_decimal128_ce, 1, php_phongo_type_ce);
375378
zend_class_implements(php_phongo_decimal128_ce, 1, zend_ce_serializable);
376379

380+
#if PHP_VERSION_ID >= 80000
381+
zend_class_implements(php_phongo_decimal128_ce, 1, zend_ce_stringable);
382+
#endif
383+
377384
memcpy(&php_phongo_handler_decimal128, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
378385
php_phongo_handler_decimal128.clone_obj = php_phongo_decimal128_clone_object;
379386
php_phongo_handler_decimal128.get_debug_info = php_phongo_decimal128_get_debug_info;

src/BSON/Decimal128Interface.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@
2626
zend_class_entry* php_phongo_decimal128_interface_ce;
2727

2828
/* {{{ MongoDB\BSON\Decimal128Interface function entries */
29-
ZEND_BEGIN_ARG_INFO_EX(ai_Decimal128Interface_void, 0, 0, 0)
29+
/* clang-format off */
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Decimal128Interface___toString, 0, 0, IS_STRING, 0)
3031
ZEND_END_ARG_INFO()
3132

3233
static zend_function_entry php_phongo_decimal128_interface_me[] = {
33-
/* clang-format off */
34-
ZEND_ABSTRACT_ME(Decimal128Interface, __toString, ai_Decimal128Interface_void)
34+
ZEND_ABSTRACT_ME(Decimal128Interface, __toString, ai_Decimal128Interface___toString)
3535
PHP_FE_END
36-
/* clang-format on */
3736
};
37+
/* clang-format on */
3838
/* }}} */
3939

4040
void php_phongo_decimal128_interface_init_ce(INIT_FUNC_ARGS) /* {{{ */

src/BSON/Int64.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ static PHP_METHOD(Int64, __unserialize)
220220

221221
/* {{{ MongoDB\BSON\Int64 function entries */
222222
/* clang-format off */
223+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Int64___toString, 0, 0, IS_STRING, 0)
224+
ZEND_END_ARG_INFO()
225+
223226
ZEND_BEGIN_ARG_INFO_EX(ai_Int64___unserialize, 0, 0, 1)
224227
ZEND_ARG_ARRAY_INFO(0, data, 0)
225228
ZEND_END_ARG_INFO()
@@ -237,7 +240,7 @@ ZEND_END_ARG_INFO()
237240
static zend_function_entry php_phongo_int64_me[] = {
238241
/* __set_state intentionally missing */
239242
PHP_ME(Int64, __serialize, ai_Int64_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
240-
PHP_ME(Int64, __toString, ai_Int64_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
243+
PHP_ME(Int64, __toString, ai_Int64___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
241244
PHP_ME(Int64, __unserialize, ai_Int64___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
242245
PHP_ME(Int64, jsonSerialize, ai_Int64_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
243246
PHP_ME(Int64, serialize, ai_Int64_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -334,6 +337,10 @@ void php_phongo_int64_init_ce(INIT_FUNC_ARGS) /* {{{ */
334337
zend_class_implements(php_phongo_int64_ce, 1, php_phongo_type_ce);
335338
zend_class_implements(php_phongo_int64_ce, 1, zend_ce_serializable);
336339

340+
#if PHP_VERSION_ID >= 80000
341+
zend_class_implements(php_phongo_int64_ce, 1, zend_ce_stringable);
342+
#endif
343+
337344
memcpy(&php_phongo_handler_int64, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
338345
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(int64);
339346
php_phongo_handler_int64.clone_obj = php_phongo_int64_clone_object;

src/BSON/Javascript.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,6 +383,9 @@ ZEND_BEGIN_ARG_INFO_EX(ai_Javascript___set_state, 0, 0, 1)
383383
ZEND_ARG_ARRAY_INFO(0, properties, 0)
384384
ZEND_END_ARG_INFO()
385385

386+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Javascript___toString, 0, 0, IS_STRING, 0)
387+
ZEND_END_ARG_INFO()
388+
386389
ZEND_BEGIN_ARG_INFO_EX(ai_Javascript___unserialize, 0, 0, 1)
387390
ZEND_ARG_ARRAY_INFO(0, data, 0)
388391
ZEND_END_ARG_INFO()
@@ -401,7 +404,7 @@ static zend_function_entry php_phongo_javascript_me[] = {
401404
PHP_ME(Javascript, __construct, ai_Javascript___construct, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
402405
PHP_ME(Javascript, __serialize, ai_Javascript_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
403406
PHP_ME(Javascript, __set_state, ai_Javascript___set_state, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
404-
PHP_ME(Javascript, __toString, ai_Javascript_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
407+
PHP_ME(Javascript, __toString, ai_Javascript___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
405408
PHP_ME(Javascript, __unserialize, ai_Javascript___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
406409
PHP_ME(Javascript, jsonSerialize, ai_Javascript_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
407410
PHP_ME(Javascript, serialize, ai_Javascript_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -506,6 +509,10 @@ void php_phongo_javascript_init_ce(INIT_FUNC_ARGS) /* {{{ */
506509
zend_class_implements(php_phongo_javascript_ce, 1, php_phongo_type_ce);
507510
zend_class_implements(php_phongo_javascript_ce, 1, zend_ce_serializable);
508511

512+
#if PHP_VERSION_ID >= 80000
513+
zend_class_implements(php_phongo_javascript_ce, 1, zend_ce_stringable);
514+
#endif
515+
509516
memcpy(&php_phongo_handler_javascript, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
510517
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(javascript);
511518
php_phongo_handler_javascript.clone_obj = php_phongo_javascript_clone_object;

src/BSON/JavascriptInterface.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,20 @@
2626
zend_class_entry* php_phongo_javascript_interface_ce;
2727

2828
/* {{{ MongoDB\BSON\JavascriptInterface function entries */
29+
/* clang-format off */
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_JavascriptInterface___toString, 0, 0, IS_STRING, 0)
31+
ZEND_END_ARG_INFO()
32+
2933
ZEND_BEGIN_ARG_INFO_EX(ai_JavascriptInterface_void, 0, 0, 0)
3034
ZEND_END_ARG_INFO()
3135

3236
static zend_function_entry php_phongo_javascript_interface_me[] = {
33-
/* clang-format off */
3437
ZEND_ABSTRACT_ME(JavascriptInterface, getCode, ai_JavascriptInterface_void)
3538
ZEND_ABSTRACT_ME(JavascriptInterface, getScope, ai_JavascriptInterface_void)
36-
ZEND_ABSTRACT_ME(JavascriptInterface, __toString, ai_JavascriptInterface_void)
39+
ZEND_ABSTRACT_ME(JavascriptInterface, __toString, ai_JavascriptInterface___toString)
3740
PHP_FE_END
38-
/* clang-format on */
3941
};
42+
/* clang-format on */
4043
/* }}} */
4144

4245
void php_phongo_javascript_interface_init_ce(INIT_FUNC_ARGS) /* {{{ */

src/BSON/ObjectId.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,9 @@ ZEND_BEGIN_ARG_INFO_EX(ai_ObjectId___set_state, 0, 0, 1)
311311
ZEND_ARG_ARRAY_INFO(0, properties, 0)
312312
ZEND_END_ARG_INFO()
313313

314+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_ObjectId___toString, 0, 0, IS_STRING, 0)
315+
ZEND_END_ARG_INFO()
316+
314317
ZEND_BEGIN_ARG_INFO_EX(ai_ObjectId___unserialize, 0, 0, 1)
315318
ZEND_ARG_ARRAY_INFO(0, data, 0)
316319
ZEND_END_ARG_INFO()
@@ -330,7 +333,7 @@ static zend_function_entry php_phongo_objectid_me[] = {
330333
PHP_ME(ObjectId, getTimestamp, ai_ObjectId_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
331334
PHP_ME(ObjectId, __serialize, ai_ObjectId_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
332335
PHP_ME(ObjectId, __set_state, ai_ObjectId___set_state, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
333-
PHP_ME(ObjectId, __toString, ai_ObjectId_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
336+
PHP_ME(ObjectId, __toString, ai_ObjectId___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
334337
PHP_ME(ObjectId, __unserialize, ai_ObjectId___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
335338
PHP_ME(ObjectId, jsonSerialize, ai_ObjectId_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
336339
PHP_ME(ObjectId, serialize, ai_ObjectId_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -427,6 +430,10 @@ void php_phongo_objectid_init_ce(INIT_FUNC_ARGS) /* {{{ */
427430
zend_class_implements(php_phongo_objectid_ce, 1, php_phongo_type_ce);
428431
zend_class_implements(php_phongo_objectid_ce, 1, zend_ce_serializable);
429432

433+
#if PHP_VERSION_ID >= 80000
434+
zend_class_implements(php_phongo_objectid_ce, 1, zend_ce_stringable);
435+
#endif
436+
430437
memcpy(&php_phongo_handler_objectid, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
431438
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(objectid);
432439
php_phongo_handler_objectid.clone_obj = php_phongo_objectid_clone_object;

src/BSON/ObjectIdInterface.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,19 @@
2626
zend_class_entry* php_phongo_objectid_interface_ce;
2727

2828
/* {{{ MongoDB\BSON\ObjectIdInterface function entries */
29+
/* clang-format off */
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_ObjectIdInterface___toString, 0, 0, IS_STRING, 0)
31+
ZEND_END_ARG_INFO()
32+
2933
ZEND_BEGIN_ARG_INFO_EX(ai_ObjectIdInterface_void, 0, 0, 0)
3034
ZEND_END_ARG_INFO()
3135

3236
static zend_function_entry php_phongo_objectid_interface_me[] = {
33-
/* clang-format off */
3437
ZEND_ABSTRACT_ME(ObjectIdInterface, getTimestamp, ai_ObjectIdInterface_void)
35-
ZEND_ABSTRACT_ME(ObjectIdInterface, __toString, ai_ObjectIdInterface_void)
38+
ZEND_ABSTRACT_ME(ObjectIdInterface, __toString, ai_ObjectIdInterface___toString)
3639
PHP_FE_END
37-
/* clang-format on */
3840
};
41+
/* clang-format on */
3942
/* }}} */
4043

4144
void php_phongo_objectid_interface_init_ce(INIT_FUNC_ARGS) /* {{{ */

src/BSON/Regex.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,9 @@ ZEND_BEGIN_ARG_INFO_EX(ai_Regex___set_state, 0, 0, 1)
338338
ZEND_ARG_ARRAY_INFO(0, properties, 0)
339339
ZEND_END_ARG_INFO()
340340

341+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Regex___toString, 0, 0, IS_STRING, 0)
342+
ZEND_END_ARG_INFO()
343+
341344
ZEND_BEGIN_ARG_INFO_EX(ai_Regex___unserialize, 0, 0, 1)
342345
ZEND_ARG_ARRAY_INFO(0, data, 0)
343346
ZEND_END_ARG_INFO()
@@ -356,7 +359,7 @@ static zend_function_entry php_phongo_regex_me[] = {
356359
PHP_ME(Regex, __construct, ai_Regex___construct, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
357360
PHP_ME(Regex, __serialize, ai_Regex_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
358361
PHP_ME(Regex, __set_state, ai_Regex___set_state, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
359-
PHP_ME(Regex, __toString, ai_Regex_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
362+
PHP_ME(Regex, __toString, ai_Regex___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
360363
PHP_ME(Regex, __unserialize, ai_Regex___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
361364
PHP_ME(Regex, jsonSerialize, ai_Regex_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
362365
PHP_ME(Regex, serialize, ai_Regex_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -468,6 +471,10 @@ void php_phongo_regex_init_ce(INIT_FUNC_ARGS) /* {{{ */
468471
zend_class_implements(php_phongo_regex_ce, 1, zend_ce_serializable);
469472
zend_class_implements(php_phongo_regex_ce, 1, php_phongo_json_serializable_ce);
470473

474+
#if PHP_VERSION_ID >= 80000
475+
zend_class_implements(php_phongo_regex_ce, 1, zend_ce_stringable);
476+
#endif
477+
471478
memcpy(&php_phongo_handler_regex, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
472479
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(regex);
473480
php_phongo_handler_regex.clone_obj = php_phongo_regex_clone_object;

src/BSON/RegexInterface.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,20 @@
2626
zend_class_entry* php_phongo_regex_interface_ce;
2727

2828
/* {{{ MongoDB\BSON\RegexInterface function entries */
29+
/* clang-format off */
30+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_RegexInterface___toString, 0, 0, IS_STRING, 0)
31+
ZEND_END_ARG_INFO()
32+
2933
ZEND_BEGIN_ARG_INFO_EX(ai_RegexInterface_void, 0, 0, 0)
3034
ZEND_END_ARG_INFO()
3135

3236
static zend_function_entry php_phongo_regex_interface_me[] = {
33-
/* clang-format off */
3437
ZEND_ABSTRACT_ME(RegexInterface, getFlags, ai_RegexInterface_void)
3538
ZEND_ABSTRACT_ME(RegexInterface, getPattern, ai_RegexInterface_void)
36-
ZEND_ABSTRACT_ME(RegexInterface, __toString, ai_RegexInterface_void)
39+
ZEND_ABSTRACT_ME(RegexInterface, __toString, ai_RegexInterface___toString)
3740
PHP_FE_END
38-
/* clang-format on */
3941
};
42+
/* clang-format on */
4043
/* }}} */
4144

4245
void php_phongo_regex_interface_init_ce(INIT_FUNC_ARGS) /* {{{ */

src/BSON/Symbol.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,9 @@ static PHP_METHOD(Symbol, __unserialize)
211211

212212
/* {{{ MongoDB\BSON\Symbol function entries */
213213
/* clang-format off */
214+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Symbol___toString, 0, 0, IS_STRING, 0)
215+
ZEND_END_ARG_INFO()
216+
214217
ZEND_BEGIN_ARG_INFO_EX(ai_Symbol___unserialize, 0, 0, 1)
215218
ZEND_ARG_ARRAY_INFO(0, data, 0)
216219
ZEND_END_ARG_INFO()
@@ -228,7 +231,7 @@ ZEND_END_ARG_INFO()
228231
static zend_function_entry php_phongo_symbol_me[] = {
229232
/* __set_state intentionally missing */
230233
PHP_ME(Symbol, __serialize, ai_Symbol_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
231-
PHP_ME(Symbol, __toString, ai_Symbol_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
234+
PHP_ME(Symbol, __toString, ai_Symbol___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
232235
PHP_ME(Symbol, __unserialize, ai_Symbol___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
233236
PHP_ME(Symbol, jsonSerialize, ai_Symbol_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
234237
PHP_ME(Symbol, serialize, ai_Symbol_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -325,6 +328,10 @@ void php_phongo_symbol_init_ce(INIT_FUNC_ARGS) /* {{{ */
325328
zend_class_implements(php_phongo_symbol_ce, 1, php_phongo_type_ce);
326329
zend_class_implements(php_phongo_symbol_ce, 1, zend_ce_serializable);
327330

331+
#if PHP_VERSION_ID >= 80000
332+
zend_class_implements(php_phongo_symbol_ce, 1, zend_ce_stringable);
333+
#endif
334+
328335
memcpy(&php_phongo_handler_symbol, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
329336
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(symbol);
330337
php_phongo_handler_symbol.clone_obj = php_phongo_symbol_clone_object;

src/BSON/Timestamp.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,9 @@ ZEND_BEGIN_ARG_INFO_EX(ai_Timestamp___set_state, 0, 0, 1)
387387
ZEND_ARG_ARRAY_INFO(0, properties, 0)
388388
ZEND_END_ARG_INFO()
389389

390+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(ai_Timestamp___toString, 0, 0, IS_STRING, 0)
391+
ZEND_END_ARG_INFO()
392+
390393
ZEND_BEGIN_ARG_INFO_EX(ai_Timestamp___unserialize, 0, 0, 1)
391394
ZEND_ARG_ARRAY_INFO(0, data, 0)
392395
ZEND_END_ARG_INFO()
@@ -405,7 +408,7 @@ static zend_function_entry php_phongo_timestamp_me[] = {
405408
PHP_ME(Timestamp, __construct, ai_Timestamp___construct, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
406409
PHP_ME(Timestamp, __serialize, ai_Timestamp_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
407410
PHP_ME(Timestamp, __set_state, ai_Timestamp___set_state, ZEND_ACC_PUBLIC | ZEND_ACC_STATIC)
408-
PHP_ME(Timestamp, __toString, ai_Timestamp_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
411+
PHP_ME(Timestamp, __toString, ai_Timestamp___toString, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
409412
PHP_ME(Timestamp, __unserialize, ai_Timestamp___unserialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
410413
PHP_ME(Timestamp, jsonSerialize, ai_Timestamp_jsonSerialize, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
411414
PHP_ME(Timestamp, serialize, ai_Timestamp_void, ZEND_ACC_PUBLIC | ZEND_ACC_FINAL)
@@ -510,6 +513,10 @@ void php_phongo_timestamp_init_ce(INIT_FUNC_ARGS) /* {{{ */
510513
zend_class_implements(php_phongo_timestamp_ce, 1, php_phongo_type_ce);
511514
zend_class_implements(php_phongo_timestamp_ce, 1, zend_ce_serializable);
512515

516+
#if PHP_VERSION_ID >= 80000
517+
zend_class_implements(php_phongo_timestamp_ce, 1, zend_ce_stringable);
518+
#endif
519+
513520
memcpy(&php_phongo_handler_timestamp, phongo_get_std_object_handlers(), sizeof(zend_object_handlers));
514521
PHONGO_COMPAT_SET_COMPARE_OBJECTS_HANDLER(timestamp);
515522
php_phongo_handler_timestamp.clone_obj = php_phongo_timestamp_clone_object;

0 commit comments

Comments
 (0)