diff --git a/generated/strings.php b/generated/strings.php index 3edf9f8d..0f3b62b3 100644 --- a/generated/strings.php +++ b/generated/strings.php @@ -173,312 +173,6 @@ function soundex(string $str): string } -/** - * Returns a string produced according to the formatting string - * format. - * - * @param string $format The format string is composed of zero or more directives: - * ordinary characters (excluding %) that are - * copied directly to the result and conversion - * specifications, each of which results in fetching its - * own parameter. - * - * A conversion specification follows this prototype: - * %[argnum$][flags][width][.precision]specifier. - * - * An integer followed by a dollar sign $, - * to specify which number argument to treat in the conversion. - * - * - * Flags - * - * - * - * Flag - * Description - * - * - * - * - * - - * - * Left-justify within the given field width; - * Right justification is the default - * - * - * - * + - * - * Prefix positive numbers with a plus sign - * +; Default only negative - * are prefixed with a negative sign. - * - * - * - * (space) - * - * Pads the result with spaces. - * This is the default. - * - * - * - * 0 - * - * Only left-pads numbers with zeros. - * With s specifiers this can - * also right-pad with zeros. - * - * - * - * '(char) - * - * Pads the result with the character (char). - * - * - * - * - * - * - * An integer that says how many characters (minimum) - * this conversion should result in. - * - * A period . followed by an integer - * who's meaning depends on the specifier: - * - * - * - * For e, E, - * f and F - * specifiers: this is the number of digits to be printed - * after the decimal point (by default, this is 6). - * - * - * - * - * For g and G - * specifiers: this is the maximum number of significant - * digits to be printed. - * - * - * - * - * For s specifier: it acts as a cutoff point, - * setting a maximum character limit to the string. - * - * - * - * - * - * If the period is specified without an explicit value for precision, - * 0 is assumed. - * - * - * - * - * Specifiers - * - * - * - * Specifier - * Description - * - * - * - * - * % - * - * A literal percent character. No argument is required. - * - * - * - * b - * - * The argument is treated as an integer and presented - * as a binary number. - * - * - * - * c - * - * The argument is treated as an integer and presented - * as the character with that ASCII. - * - * - * - * d - * - * The argument is treated as an integer and presented - * as a (signed) decimal number. - * - * - * - * e - * - * The argument is treated as scientific notation (e.g. 1.2e+2). - * The precision specifier stands for the number of digits after the - * decimal point since PHP 5.2.1. In earlier versions, it was taken as - * number of significant digits (one less). - * - * - * - * E - * - * Like the e specifier but uses - * uppercase letter (e.g. 1.2E+2). - * - * - * - * f - * - * The argument is treated as a float and presented - * as a floating-point number (locale aware). - * - * - * - * F - * - * The argument is treated as a float and presented - * as a floating-point number (non-locale aware). - * Available as of PHP 5.0.3. - * - * - * - * g - * - * - * General format. - * - * - * Let P equal the precision if nonzero, 6 if the precision is omitted, - * or 1 if the precision is zero. - * Then, if a conversion with style E would have an exponent of X: - * - * - * If P > X ≥ −4, the conversion is with style f and precision P − (X + 1). - * Otherwise, the conversion is with style e and precision P − 1. - * - * - * - * - * G - * - * Like the g specifier but uses - * E and F. - * - * - * - * o - * - * The argument is treated as an integer and presented - * as an octal number. - * - * - * - * s - * - * The argument is treated and presented as a string. - * - * - * - * u - * - * The argument is treated as an integer and presented - * as an unsigned decimal number. - * - * - * - * x - * - * The argument is treated as an integer and presented - * as a hexadecimal number (with lowercase letters). - * - * - * - * X - * - * The argument is treated as an integer and presented - * as a hexadecimal number (with uppercase letters). - * - * - * - * - * - * - * General format. - * - * Let P equal the precision if nonzero, 6 if the precision is omitted, - * or 1 if the precision is zero. - * Then, if a conversion with style E would have an exponent of X: - * - * If P > X ≥ −4, the conversion is with style f and precision P − (X + 1). - * Otherwise, the conversion is with style e and precision P − 1. - * - * The c type specifier ignores padding and width - * - * Attempting to use a combination of the string and width specifiers with character sets that require more than one byte per character may result in unexpected results - * - * Variables will be co-erced to a suitable type for the specifier: - * - * Type Handling - * - * - * - * Type - * Specifiers - * - * - * - * - * string - * s - * - * - * integer - * - * d, - * u, - * c, - * o, - * x, - * X, - * b - * - * - * - * double - * - * g, - * G, - * e, - * E, - * f, - * F - * - * - * - * - * - * @param mixed $params - * @return string Returns a string produced according to the formatting string - * format. - * @throws StringsException - * - */ -function sprintf(string $format, ...$params): string -{ - error_clear_last(); - if ($params !== []) { - $result = \sprintf($format, ...$params); - } else { - $result = \sprintf($format); - } - if ($result === false) { - throw StringsException::createFromPhpError(); - } - return $result; -} - - /** * Returns the portion of string specified by the * start and length parameters. diff --git a/generator/config/specialCasesFunctions.php b/generator/config/specialCasesFunctions.php index f56b5613..4e63c46e 100644 --- a/generator/config/specialCasesFunctions.php +++ b/generator/config/specialCasesFunctions.php @@ -4,10 +4,11 @@ * They are declared in lib/special_cases.php */ return [ - 'json_decode', 'apc_fetch', 'apcu_fetch', - 'preg_replace', + 'json_decode', 'openssl_encrypt', + 'preg_replace', 'readdir', + 'sprintf', ]; diff --git a/lib/special_cases.php b/lib/special_cases.php index 05682b8a..9526fdcd 100644 --- a/lib/special_cases.php +++ b/lib/special_cases.php @@ -13,6 +13,7 @@ use Safe\Exceptions\JsonException; use Safe\Exceptions\OpensslException; use Safe\Exceptions\PcreException; +use Safe\Exceptions\StringsException; /** * Wrapper for json_decode that throws when an error occurs. @@ -209,3 +210,41 @@ function openssl_encrypt(string $data, string $method, string $key, int $options } return $result; } + +/** + * Return a formatted string + * @link https://php.net/manual/en/function.sprintf.php + * @param string $format
+ * The format string is composed of zero or more directives: + * ordinary characters (excluding %) that are + * copied directly to the result, and conversion + * specifications, each of which results in fetching its + * own parameter. This applies to both sprintf + * and printf. + *
+ *+ * Each conversion specification consists of a percent sign + * (%), followed by one or more of these + * elements, in order: + * An optional sign specifier that forces a sign + * (- or +) to be used on a number. By default, only the - sign is used + * on a number if it's negative. This specifier forces positive numbers + * to have the + sign attached as well, and was added in PHP 4.3.0. + * @param bool|float|int|string $args [optional]
+ *
+ * @return string a string produced according to the formatting string + * format. + */ +function sprintf(string $format, ...$args): string +{ + error_clear_last(); + if ($args === []) { + $result = \sprintf($format); + } else { + $result = \sprintf($format, ...$args); + } + if ($result === false) { + throw StringsException::createFromPhpError(); + } + return $result; +}