Skip to content

Switching Fiber contexts during autoload may causes Class "%s" not found error #18569

@Appla

Description

@Appla

Description

The following codes:

  • BasicObject.php
<?php

class BasicObject
{
}
  • Constant.php
<?php

class Constant extends BasicObject
{
    public const 
        CONST_1 = 'PHP * Swoole',
        CONST_2 = 'PHP * Fiber';
}
  • SimpleConst.php
<?php

class SimpleConst
{
    public const GREETINGS = 'hello world!';
}
  • test.php
<?php

\spl_autoload_register(static function ($clsName) {
    if ($clsName === 'BasicObject') {
        Fiber::suspend('before load BasicObject in autoload');
    }
    $path = __DIR__ . '/' . \str_replace('\\', '/', $clsName) . '.php';
    if (\is_file($path)) {
        require $path;
    } else {
        echo "class {$clsName} not found\n";
    }
});

function work_fn(...$args)
{
    echo SimpleConst::GREETINGS . PHP_EOL;
    echo Fiber::suspend("before load constant\n");
    return Fiber::suspend(Constant::CONST_1);
}

$fiber = new Fiber(work_fn(...));
echo $fiber->start();
echo $fiber->resume("continue\n");
echo $fiber->resume(Constant::CONST_2);

Resulted in this output:

hello world!
before load constant
continue
before load BasicObject in autoload

Fatal error: Uncaught Error: Class "Constant" not found in /path/to/test.php:25
Stack trace:
#0 {main}
  thrown in /path/to/test.php on line 25

But I expected this output instead:

Class "Constant" should load successfully

This is similar to the issue discussed in swoole/swoole-src#5770.

Related codes:
Load unlinked CE

PHP Version

PHP 8.3.21 (cli) (built: May  6 2025 13:58:10) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.3.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.21, Copyright (c), by Zend Technologies

Operating System

Fedora 42

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions