--TEST-- Hooks: apply passes value through, add registers filters that chain in order --FILE-- strtoupper($v)); echo Hooks::apply(Hook::PROCESS_CONTENT, 'hello') . "\n"; // Filters chain: second receives output of first Hooks::add(Hook::PROCESS_CONTENT, fn($v) => $v . '!'); echo Hooks::apply(Hook::PROCESS_CONTENT, 'hello') . "\n"; // Other hooks are unaffected echo Hooks::apply(Hook::TEMPLATE_VARS, 'foo') . "\n"; // Extra args are passed through to each filter Hooks::add(Hook::TEMPLATE_VARS, fn($v, $extra) => "$v:$extra"); echo Hooks::apply(Hook::TEMPLATE_VARS, 'x', 'ctx') . "\n"; // Non-string values pass through too $arr = ['a' => 1]; echo Hooks::apply(Hook::CONTEXT_READY, $arr) === $arr ? 'array passthrough' : 'fail'; echo "\n"; ?> --EXPECT-- hello foo HELLO HELLO! foo x:ctx array passthrough