Skip to content

Stdlib: SessionStatus enum — PHP 8.4 session_status() backed enum missing (ext/session/session.c, pairs #3418) #7321

@PurHur

Description

@PurHur

Summary

PHP 8.4 replaces PHP_SESSION_* int constants with SessionStatus int-backed enum for session_status() return value and accepts the enum where session APIs take a status. Issue #3418 tracks procedural session_status() with legacy int constants; this issue covers the PHP 8.4 enum surface and return-type parity.

php-src-strict: session_status() must return SessionStatus enum case objects (not bare ints) on PHP 8.4+ semantics.

php-src reference

Repro

./script/docker-exec.sh -- php bin/vm.php test/repro-maintainer/session_status_enum.php

Current: bool(false) for class_exists('SessionStatus'); session_status() undefined

Expected (Zend PHP 8.4+): enum_exists('SessionStatus'); after session_start() compare with SessionStatus::Active.

Implementation (PHP-in-PHP)

  1. Register SessionStatus in ext/standard/BuiltinEnums.php (or session module stub) — same pattern as Stdlib: ExitStatus enum — PHP 8.4 exit()/die() backed enum missing (basic_functions.stub.php) #7294 ExitStatus.
  2. Implement session_status() in lib/Web/Session.php / ext/standard/ returning enum case (phase 1 of Stdlib: session_status() / session_save_path() — session lifecycle introspection (ext/session parity) #3418 can land int path; this issue upgrades to enum).
  3. Export legacy PHP_SESSION_* constants as aliases of enum backing values for BC where Zend does.
  4. Compliance .phpt: none → SessionStatus::None, active → SessionStatus::Active.

Done when

Links

#3418 · #7294 · #1492

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:vmVirtual machinearea:webWeb / CGI / superglobalsenhancementNew feature or requestimplementation-readySpec complete: repro, php-src ref, done-when — safe for workers to claimphase-2:languagePhase 2 – language featuresphase-4:stdlibPhase 4 – stdlib for web apps

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions