## Category `stdlib` · **php-src-strict** ## Problem php-src names `mb_strlen()` parameters **`string`** and **`encoding`**. Zend accepts: ```php mb_strlen(string: 'é', encoding: 'UTF-8'); // int(1) ``` VM rejects with `Unknown named parameter $string`. Positional `mb_strlen('é', 'UTF-8')` works. ## php-src reference - [php/php-src `ext/mbstring/mbstring.c`](https://github.com/php/php-src/blob/master/ext/mbstring/mbstring.c) — `PHP_FUNCTION(mb_strlen)` - [php/php-src `ext/mbstring/mbstring.stub.php`](https://github.com/php/php-src/blob/master/ext/mbstring/mbstring.stub.php) - Named binding: [php/php-src `Zend/zend_compile.c`](https://github.com/php/php-src/blob/master/Zend/zend_compile.c) ## Repro (failure today) ```php <?php echo mb_strlen(string: 'é', encoding: 'UTF-8'), "\n"; ``` ```bash ./script/docker-exec.sh -- bash -lc 'source script/php-env.sh php repro.php # Zend: 1 php bin/vm.php repro.php # Fatal: Unknown named parameter $string ' ``` | Call | Zend PHP 8.2+ | VM today | |------|---------------|----------| | `mb_strlen(string: 'é', encoding: 'UTF-8')` | `1` | fatal ❌ | | positional | `1` | `1` ✅ | ## Scope (this repo) | Path | Work | |------|------| | `lib/BuiltinParamNames.php` / patches | Register `string`/`encoding` for `mb_strlen` | | `lib/Compiler.php`, `lib/VM/NamedArgs.php`, `lib/JIT/NamedArgs.php` | Named binding | | `ext/types/mb_strlen.php` or `ext/mbstring/` | handler after wiring | | Tests | `test/compliance/cases/stdlib/mb_strlen_named.phpt` | **PHP-in-PHP first** — no new `runtime/*.c`. ## Done when - [ ] Repro prints `1` on VM (php-src-strict) - [ ] Omitted `encoding:` uses internal encoding like positional form - [ ] `./script/ci-fast.sh --filter mb_strlen_named` green ## Related - **#9977** mb_trim `characters:` · **#3075** mb_convert_encoding · **#1492**
Category
stdlib· php-src-strictProblem
php-src names
mb_strlen()parametersstringandencoding. Zend accepts:VM rejects with
Unknown named parameter $string. Positionalmb_strlen('é', 'UTF-8')works.php-src reference
ext/mbstring/mbstring.c—PHP_FUNCTION(mb_strlen)ext/mbstring/mbstring.stub.phpZend/zend_compile.cRepro (failure today)
mb_strlen(string: 'é', encoding: 'UTF-8')111✅Scope (this repo)
lib/BuiltinParamNames.php/ patchesstring/encodingformb_strlenlib/Compiler.php,lib/VM/NamedArgs.php,lib/JIT/NamedArgs.phpext/types/mb_strlen.phporext/mbstring/test/compliance/cases/stdlib/mb_strlen_named.phptPHP-in-PHP first — no new
runtime/*.c.Done when
1on VM (php-src-strict)encoding:uses internal encoding like positional form./script/ci-fast.sh --filter mb_strlen_namedgreenRelated
charactersparam + new builtins (ext/mbstring/mbstring.c) #9977 mb_trimcharacters:· Stdlib: mb_convert_encoding / mb_detect_encoding (ext/mbstring parity) #3075 mb_convert_encoding · Epic: Self-host critical path — compiler compiles itself (M3→M5) #1492