<?php
$wp_version = '6.2.0';
// WP Core code.
class Foo {
public function __call( $name, $arguments ) {
if ( 'new_method_A' === $name
|| 'new_method_B' === $name
|| 'new_method_C' === $name
) {
return $this->$name( ...$arguments );
}
$class = get_class( $this );
$trace = debug_backtrace();
$file = $trace[0]['file'];
$line = $trace[0]['line'];
throw new BadMethodCallException( "Call to undefined method $class::$name() in $file on line $line" );
}
private function new_method_A() {
echo __FUNCTION__, ' called!', PHP_EOL;
}
private function new_method_B() {
echo __FUNCTION__, ' called!', PHP_EOL;
}
public function new_method_C() {
echo __FUNCTION__, ' called!', PHP_EOL;
}
}
// Plugin code.
$obj = new Foo();
try {
$obj->new_method_A();
$obj->new_method_B();
$obj->new_method_C();
} catch(BadMethodCallException $e) {
// Do it some other way to support older WP versions.
} finally {
// Do something with the output of the methods, no matter whether it was created via the code in `try` or the code in `catch`.
}
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
new_method_A called!
new_method_B called!
new_method_C called!
Output for 5.5.0 - 5.5.38
Parse error: syntax error, unexpected '.' in /in/XtmLn on line 11
Process exited with code 255.
Parse error: syntax error, unexpected '.', expecting ')' in /in/XtmLn on line 11
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected '.', expecting ')' in /in/XtmLn on line 11
Process exited with code 255.
Output for 4.4.2 - 4.4.9
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/XtmLn on line 6
Process exited with code 255.
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /in/XtmLn on line 6
Process exited with code 255.
Output for 4.3.2 - 4.3.4
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in /in/XtmLn on line 6
Process exited with code 255.