--TEST-- ZipArchive::registerProgressCallback() with a trampoline --EXTENSIONS-- zip --SKIPIF-- --INI-- date.timezone=UTC --FILE-- open($file, ZIPARCHIVE::CREATE)) { exit('failed'); } var_dump($zip->registerProgressCallback(0.5, $callback)); var_dump($zip->addFromString('foo', 'entry #1')); var_dump($zip->close()); echo "Set trampoline after closed Archive:\n"; try { var_dump($zip->registerProgressCallback(0.5, $callback)); } catch (Throwable $e) { echo $e::class, ': ', $e->getMessage(), PHP_EOL; } unlink($file); unset($zip); $zip = new ZipArchive; if (!$zip->open($file, ZIPARCHIVE::CREATE)) { exit('failed'); } var_dump($zip->registerProgressCallback(0.5, $callbackThrow)); var_dump($zip->addFromString('foo', 'entry #1')); try { var_dump($zip->close()); } catch (Throwable $e) { echo $e::class, ': ', $e->getMessage(), PHP_EOL; } unlink($file); unset($zip); ?> Done --CLEAN-- --EXPECT-- bool(true) bool(true) Trampoline for trampoline array(1) { [0]=> float(0) } start Trampoline for trampoline array(1) { [0]=> float(1) } end bool(true) Set trampoline after closed Archive: ValueError: Invalid or uninitialized Zip object bool(true) bool(true) Trampoline for trampolineThrow Exception: boo Done