Skip to content

Stdlib: ReflectionClassConstant::getModifiers() and IS_* constants missing (ext/reflection/php_reflection.c) #17360

Closed

Description

@PurHur

Category

stdlib · php-src-strict

Problem

ReflectionClassConstant exposes isPublic()/isProtected()/isPrivate() but not getModifiers() or the IS_PUBLIC/IS_PROTECTED/IS_PRIVATE/IS_FINAL class constants. Code introspecting modifier bitmasks fails.

Repro Zend 8.1+ VM (2026-07-08)
ReflectionClassConstant::IS_PUBLIC 256 (typed int on 8.4) undefined constant
(new ReflectionClassConstant(...))->getModifiers() visibility bitmask undefined method

php-src reference

PHP implementation target

  • lib/VM/Builtin/ReflectionClassConstant*.php — getModifiers() OR-ing IS_* flags from stored visibility/final metadata
  • Register IS_PUBLIC, IS_PROTECTED, IS_PRIVATE, IS_FINAL on the builtin reflection class (forward profile values match php-src 8.4)

Repro

./script/docker-exec.sh -- bash -lc 'export PHP_COMPILER_PROFILE=8.4 && php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_modifiers.php'

Done when

  • IS_* constants defined with php-src values on forward profile
  • getModifiers() returns correct bitmask for public/protected/private/final constants
  • Compliance guard under test/compliance/cases/reflection/
  • php-src-strict; no php-compiler-strict shortcut

Activity

  1. added
    enhancementNew feature or request
    phase-4:stdlibPhase 4 – stdlib for web apps
    area:vmVirtual machine
    implementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claim
    on Jul 8, 2026
  2. PurHur commented on Jul 8, 2026

    @PurHur
    OwnerAuthor

    claim: PHP Compiler STD Lib Advanced — batch (issues #17359 #17360 #17361)

  3. PurHur commented on Jul 8, 2026

    @PurHur
    OwnerAuthor

    Merged in PR #17363.

    Verification (Docker, PHP_COMPILER_PROFILE=8.4):

    • php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_has_type.php → typed/untyped
    • php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_modifiers.php → IS_* 1/2/4/32, getModifiers 1/2/4/33
    • php bin/vm.php test/repro/maintainer_gap_reflection_class_constant_is_enum_case.php → enum/scalar
    • Compliance: reflection_class_constant_has_type.phpt, reflection_class_constant_modifiers.phpt, reflection_class_constant_is_enum_case_typed_const.phpt

    ./script/ci-fast.sh green.

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 machineenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-4:stdlibPhase 4 – stdlib for web appsstdlib

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions