💣️N'étant pas du tout un expert sur le sujet, tout ce qui suit est à prendre avec des pincettes.
ZEND_BEGIN_ARG_INFO_EX(arginfo_triple, 0, 1, 0)
ZEND_ARG_TYPE_INFO(0, str, IS_LONG, 1)
ZEND_END_ARG_INFO()
static const zend_function_entry functions[] = {
PHP_FE(triple, arginfo_triple)
PHP_FE_END
};
PHP_FUNCTION(triple)
{
zend_long integer;
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 1, 1)
Z_PARAM_LONG(integer)
ZEND_PARSE_PARAMETERS_END();
RETVAL_LONG(integer*3);
}
static PHP_FUNCTION(triple);
static const zend_function_entry functions[] = {
PHP_FE(addition, arginfo_addition)
PHP_FE_END
};
ZEND_BEGIN_ARG_INFO_EX(arginfo_addition, 0, 1, 0)
ZEND_ARG_TYPE_INFO(0, a, IS_LONG, 1)
ZEND_ARG_TYPE_INFO(0, b, IS_LONG, 1)
ZEND_END_ARG_INFO()
PHP_FUNCTION(addition)
{
zend_long a;
zend_long b;
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 2, 2)
Z_PARAM_LONG(a)
Z_PARAM_LONG(b)
ZEND_PARSE_PARAMETERS_END();
RETVAL_LONG(a+b);
}
static PHP_FUNCTION(addition);
📖️️L'idée de ce petit jeu provient de ce TP en C sur le site d'OpenClassRooms(https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14828-tp-plus-ou-moins-votre-premier-jeu).
ZEND_BEGIN_ARG_INFO_EX(arginfo_guessTheNumber, 0, 1, 0)
ZEND_END_ARG_INFO()
static const zend_function_entry functions[] = {
PHP_FE(guessTheNumber, arginfo_guessTheNumber)
PHP_FE_END
};
zend_long THE_NUMBER_TO_FIND;
PHP_FUNCTION(guessTheNumber)
{
zend_long guess_long;
if (!THE_NUMBER_TO_FIND) {
THE_NUMBER_TO_FIND = rand() % 101;
}
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 1, 1)
Z_PARAM_LONG(guess_long)
ZEND_PARSE_PARAMETERS_END();
zend_long guessed_status;
if (THE_NUMBER_TO_FIND > guess_long) {
guessed_status = 1;
} else if (THE_NUMBER_TO_FIND < guess_long) {
guessed_status = -1;
} else {
guessed_status = 0;
}
RETVAL_LONG(guessed_status);
}
#endif
static PHP_FUNCTION(guessTheNumber);
# php -a
php > var_dump(guessTheNumber(40));
int(-1)
php > var_dump(guessTheNumber(30));
int(-1)
php > var_dump(guessTheNumber(28));
int(0)
php > var_dump(guessTheNumber(28));
int(0)
zend_long THE_NUMBER_TO_FIND;
void resetTheNumber()
{
THE_NUMBER_TO_FIND = rand() % 101;
}
PHP_FUNCTION(resetTheNumber)
{
resetTheNumber();
}
PHP_FUNCTION(guessTheNumber)
{
zend_long guess_long;
if (!THE_NUMBER_TO_FIND) {
resetTheNumber();
}
ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 1, 1)
Z_PARAM_LONG(guess_long)
ZEND_PARSE_PARAMETERS_END();
zend_long guessed_status;
if (THE_NUMBER_TO_FIND > guess_long) {
guessed_status = 1;
} else if (THE_NUMBER_TO_FIND < guess_long) {
guessed_status = -1;
} else {
guessed_status = 0;
}
RETVAL_LONG(guessed_status);
}
define ZEND_PARSE_PARAMETERS_START_EX(flags, min_num_args, max_num_args)