- spl_autoload_register: documentation ( source)
- register_shutdown_function: documentation ( source)
<?php
// Current output:
// TestWithPublicMethods@enter OK
// TestWithPrivateMethods@enter OK
// TestWithPublicMethods@leave OK
//
// Warning: (Registered shutdown functions) Unable to call TestWithPrivateMethods::leave() - function does not exist in Unknown on line 0
// Expected:
// TestWithPublicMethods@enter OK
// TestWithPrivateMethods@enter OK
// TestWithPublicMethods@leave OK
// TestWithPrivateMethods@leave OK
class TestWithPublicMethods {
public function test() {
spl_autoload_register([ $this, 'enter' ], true, true);
register_shutdown_function([ $this, 'leave' ]);
}
public function enter() {
eval('class TestWithPublicMethodsAutoload {}');
echo __CLASS__ . '@' . __FUNCTION__ . " OK\n";
}
public function leave() {
echo __CLASS__ . '@' . __FUNCTION__ . " OK\n";
}
}
(new TestWithPublicMethods)->test();
new TestWithPublicMethodsAutoload;
class TestWithPrivateMethods {
public function test() {
spl_autoload_register([ $this, 'enter' ], true, true);
register_shutdown_function([ $this, 'leave' ]);
}
private function enter() {
eval('class TestWithPrivateMethodsAutoload {}');
echo __CLASS__ . '@' . __FUNCTION__ . " OK\n";
}
private function leave() {
echo __CLASS__ . '@' . __FUNCTION__ . " OK\n";
}
}
(new TestWithPrivateMethods)->test();
new TestWithPrivateMethodsAutoload;