@@ -351,6 +351,54 @@ To do that, some ``RETURN_***()`` macros are dedicated as well as some ``RETVAL_
351
351
Both just set the type and value of the ``return_value `` zval, but ``RETURN_***() `` ones will follow that by a C
352
352
``return `` that will return from that current function.
353
353
354
+ Alternatively, the API provides alternative macros to handle and parse parameters, It's more readable if you get
355
+ messed with the python style specifiers.
356
+
357
+ You will need to starting & ending parsing the function parameters with the following macros::
358
+
359
+ ZEND_PARSE_PARAMETERS_START(min_argument_count, max_argument_count) /* takes two parameters */
360
+ /* here we will go with argument lists */
361
+ ZEND_PARSE_PARAMETERS_END();
362
+
363
+ The available parameters macros could be listed as follows (more on the required arguments for those macros later)::
364
+
365
+ Z_PARAM_ARRAY() /* old "a" */
366
+ Z_PARAM_ARRAY_OR_OBJECT() /* old "A" */
367
+ Z_PARAM_BOOL() /* old "b" */
368
+ Z_PARAM_CLASS() /* old "C" */
369
+ Z_PARAM_DOUBLE() /* old "d" */
370
+ Z_PARAM_FUNC() /* old "f" */
371
+ Z_PARAM_ARRAY_HT() /* old "h" */
372
+ Z_PARAM_ARRAY_OR_OBJECT_HT() /* old "H" */
373
+ Z_PARAM_LONG() /* old "l" */
374
+ Z_PARAM_STRICT_LONG() /* old "L" */
375
+ Z_PARAM_OBJECT() /* old "o" */
376
+ Z_PARAM_OBJECT_OF_CLASS() /* old "O" */
377
+ Z_PARAM_PATH() /* old "p" */
378
+ Z_PARAM_PATH_STR() /* old "P" */
379
+ Z_PARAM_RESOURCE() /* old "r" */
380
+ Z_PARAM_STRING() /* old "s" */
381
+ Z_PARAM_STR() /* old "S" */
382
+ Z_PARAM_ZVAL() /* old "z" */
383
+ Z_PARAM_VARIADIC() /* old "+" and "*" */
384
+
385
+ And to add a parameter as an optional parameter we use the following macro::
386
+
387
+ Z_PARAM_OPTIONAL /* old "|" */
388
+
389
+ Here is our example with the new parameters parsing style::
390
+
391
+ PHP_FUNCTION(fahrenheit_to_celsius)
392
+ {
393
+ double f;
394
+
395
+ ZEND_PARSE_PARAMETERS_START(1, 1)
396
+ Z_PARAM_DOUBLE(f);
397
+ ZEND_PARSE_PARAMETERS_END();
398
+
399
+ RETURN_DOUBLE(php_fahrenheit_to_celsius(f));
400
+ }
401
+
354
402
Adding tests
355
403
************
356
404
0 commit comments