Category
stdlib · php-src-strict · PHP 8.4 mbstring case helpers (pillar 4)
Problem
#20799 closed 2026-07-19, but master still has no mb_ucwords() under PHP_COMPILER_PROFILE=8.4 while sibling helpers (mb_ucfirst, mb_trim, …) register. Probed 2026-07-20 in Docker.
| Repro |
Zend 8.4 + mbstring |
VM PROFILE=8.4 (2026-07-20) |
function_exists('mb_ucfirst') |
true |
true |
function_exists('mb_ucwords') |
true |
false |
mb_ucwords('hello world') |
Hello World |
Error: undefined function |
php-src reference
PHP implementation target
- Add
ext/mbstring/mb_ucwords.php mirroring mb_ucfirst / mb_convert_case paths
- Register in
ext/mbstring/Module.php with the same forward-profile gate as mb_ucfirst
- PHP-in-PHP; no new C in
runtime/
Repro
./script/docker-exec.sh -- bash -lc 'export PHP_COMPILER_PROFILE=8.4
php bin/vm.php test/repro/maintainer_gap_mb_ucwords_missing_forward84.php'
Expect mb_ucwords=yes and Hello World, not fail: undefined mb_ucwords.
Done when
Category
stdlib· php-src-strict · PHP 8.4 mbstring case helpers (pillar 4)Problem
#20799closed 2026-07-19, but master still has nomb_ucwords()underPHP_COMPILER_PROFILE=8.4while sibling helpers (mb_ucfirst,mb_trim, …) register. Probed 2026-07-20 in Docker.function_exists('mb_ucfirst')truetruefunction_exists('mb_ucwords')truefalsemb_ucwords('hello world')Hello WorldError: undefined functionphp-src reference
ext/mbstring/mbstring.c—PHP_FUNCTION(mb_ucwords)ext/mbstring/mbstring.stub.php—mb_ucwordsstubPHP implementation target
ext/mbstring/mb_ucwords.phpmirroringmb_ucfirst/mb_convert_casepathsext/mbstring/Module.phpwith the same forward-profile gate asmb_ucfirstruntime/Repro
Expect
mb_ucwords=yesandHello World, notfail: undefined mb_ucwords.Done when
function_exists('mb_ucwords')true underPHP_COMPILER_PROFILE=8.4mb_ucwords('hello world')→Hello World(encoding arg parity with Zend).phptundertest/compliance/cases/mbstring/; php-src-strict