<?php
class TrampolineTest {
public function __call(string $name, array $arguments) {
echo 'Trampoline for ', $name, PHP_EOL;
}
}
$o = new TrampolineTest();
$callback1 = [$o, 'trampoline1'];
$callback2 = [$o, 'trampoline2'];
spl_autoload_register($callback1);
spl_autoload_register($callback2);
spl_autoload_register($callback1); // 2nd call ignored
var_dump(spl_autoload_functions());
var_dump(class_exists("TestClass", true));
echo "Unregister trampoline:\n";
var_dump(spl_autoload_unregister($callback1));
var_dump(spl_autoload_unregister($callback1));
var_dump(spl_autoload_unregister($callback2));
var_dump(spl_autoload_functions());
var_dump(class_exists("TestClass", true));
- Output for 8.1.14 - 8.1.33, 8.2.1 - 8.2.29, 8.3.0 - 8.3.26, 8.4.1 - 8.4.13
- array(2) {
[0]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline1"
}
[1]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline2"
}
}
Trampoline for trampoline1
Trampoline for trampoline2
bool(false)
Unregister trampoline:
bool(true)
bool(false)
bool(true)
array(0) {
}
bool(false)
- Output for 8.0.1 - 8.0.30, 8.1.0 - 8.1.13, 8.2.0
- array(3) {
[0]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline1"
}
[1]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline2"
}
[2]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline1"
}
}
Trampoline for trampoline1
Trampoline for trampoline2
Trampoline for trampoline1
bool(false)
Unregister trampoline:
bool(false)
bool(false)
bool(false)
array(3) {
[0]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline1"
}
[1]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline2"
}
[2]=>
array(2) {
[0]=>
object(TrampolineTest)#1 (0) {
}
[1]=>
string(11) "trampoline1"
}
}
Trampoline for trampoline1
Trampoline for trampoline2
Trampoline for trampoline1
bool(false)
preferences:
106.97 ms | 410 KiB | 5 Q