Skip to content

Stdlib: SplFileObject / SplFileInfo — SPL file iteration OOP (ext/spl parity) #3293

Closed

Description

@PurHur

Category

stdlib

Problem

Zend exposes SplFileInfo and SplFileObject for object-oriented file access and iteration (foreach ($file as $line)). PurHur has procedural stream builtins (fopen, fgets, …) but no SPL file classes — class_exists('SplFileObject') is false.

Verified on master:

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php -r "var_dump(class_exists(\"SplFileObject\"), class_exists(\"SplFileInfo\"));"'
# bool(false) bool(false)

php-src reference

  • ext/spl/spl_directory.c — SplFileInfo metadata (getPathname, getSize, isDir, …)
  • ext/spl/spl_file_object.c — SplFileObject extends SplFileInfo, implements RecursiveIterator / SeekableIterator
  • ext/spl/spl_iterators.c — iterator protocol for foreach
  • ext/standard/streams.c — underlying php_stream layer (reuse existing VM stream resources)

Repro

<?php
file_put_contents('/tmp/spl-test.txt', "a\nb\nc\n");
$fo = new SplFileObject('/tmp/spl-test.txt');
foreach ($fo as $i => $line) {
    echo $i, ':', trim($line), "\n";
}
$info = new SplFileInfo('/tmp/spl-test.txt');
echo $info->getSize(), "\n";
./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && php bin/vm.php repro.php'
php repro.php

Zend PHP: 0:a, 1:b, 2:c, then file size.
This compiler: unknown class SplFileObject.

Scope (this repo)

Area Path Notes
New ext ext/spl/ module Register classes + methods
VM lib/VM.php, iterator ops Wire foreach over object implementing iterator protocol (#3234 Traversable)
Streams existing ext/standard stream layer SplFileObject wraps FILE* resource
Tests test/compliance/cases/stdlib/spl_file_object*.phpt
Matrix script/capability-matrix.php

v1 methods: SplFileObject::__construct, current, key, next, rewind, valid, eof, fgets, fgetcsv, seek, getFilename; SplFileInfo::getPathname, getSize, isFile, isDir. Defer: RecursiveDirectoryIterator, flock, SplTempFileObject.

Done when

Verification

./script/docker-exec.sh -- bash -lc 'source script/php-env.sh && vendor/bin/phpunit --filter SplFile'

Links

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 May 29, 2026
  2. PurHur commented on Jun 7, 2026

    @PurHur
    OwnerAuthor

    Duplicate of #6393 (newer spec with ext/spl paths, repro script, and done-when). Workers: claim #6393.

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 apps

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions