Skip to content

Stdlib: class_alias() parity (Zend/zend_builtin_functions.c) #9211

Description

@PurHur

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)

  • User-class repro matches Zend (return true, instanceof works, $autoload honored)
  • Internal-class repro throws ValueError with Zend-shaped message; alias not registered
  • Duplicate alias / invalid name errors match php-src
  • Targeted compliance PHPT green in Docker

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machineimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web apps

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions