Category
stdlib · php-src-strict
Problem
class_alias() must match php-src behavior for alias registration, return values, $autoload handling, and rejection of internal/Zend classes.
Today VM accepts class_alias('stdClass', 'Alias') and registers a working alias; Zend throws ValueError and leaves the alias unregistered.
php-src reference
Repro
User class alias (happy path)
<?php
class A {}
var_dump(class_alias(A::class, 'B'));
var_dump(class_exists('B', false));
var_dump((new B) instanceof A);
var_dump(class_alias(A::class, 'C', false));
Internal class must fail
cat > /tmp/repro_class_alias_internal.php <<'PHP'
<?php
try {
class_alias('stdClass', 'SC2');
echo "alias ok\n";
} catch (Throwable $e) {
echo get_class($e), ': ', $e->getMessage(), "\n";
}
var_dump(class_exists('SC2', false));
PHP
./script/docker-exec.sh -- bash -lc 'php /tmp/repro_class_alias_internal.php; php bin/vm.php /tmp/repro_class_alias_internal.php'
| Probe |
Zend |
VM (today) |
class_alias('stdClass', 'SC2') |
ValueError (internal class) |
succeeds |
class_exists('SC2', false) |
false |
true |
Commands
- Zend:
php repro.php
- VM:
./script/docker-exec.sh php bin/vm.php repro.php
Scope (PHP-in-PHP)
| Layer |
Path |
| VM |
ext/standard/class_alias.php |
| Registry |
ext/standard/VmReflection.php / registerClassAlias — reject internal classes |
| JIT |
JitClassAlias if behavior differs |
| Tests |
test/compliance/cases/stdlib/class_alias_internal.phpt + user-class success case |
Done when (php-src-strict)
Related
Category
stdlib· php-src-strictProblem
class_alias()must match php-src behavior for alias registration, return values,$autoloadhandling, and rejection of internal/Zend classes.Today VM accepts
class_alias('stdClass', 'Alias')and registers a working alias; Zend throwsValueErrorand leaves the alias unregistered.php-src reference
ext/standard/basic_functions.c—PHP_FUNCTION(class_alias)Zend/zend_builtin_functions.c— user-class-only alias targetsRepro
User class alias (happy path)
Internal class must fail
class_alias('stdClass', 'SC2')ValueError(internal class)class_exists('SC2', false)falsetrueCommands
php repro.php./script/docker-exec.sh php bin/vm.php repro.phpScope (PHP-in-PHP)
ext/standard/class_alias.phpext/standard/VmReflection.php/registerClassAlias— reject internal classesJitClassAliasif behavior differstest/compliance/cases/stdlib/class_alias_internal.phpt+ user-class success caseDone when (php-src-strict)
true,instanceofworks,$autoloadhonored)ValueErrorwith Zend-shaped message; alias not registeredRelated