<?php
/**
* This base class defines two methods of interest, one private, one protected.
*
* It also includes 3 ways to invoke these methods from outside.
*/
class Base {
/**
* A private base method
*/
private function priv() {
echo __CLASS__ . PHP_EOL;
}
/**
* Expose the private method
*/
public function callPriv() {
$this->priv();
}
/**
* Expose either method via call_user_func().
*/
public function call() {
call_user_func(array($this, 'priv'));
}
/**
* Expose either method using Reflection.
*/
public function reflect() {
$rm = new ReflectionMethod($this, 'priv');
$rm->setAccessible(true);
$rm->invoke($this);
}
}
/**
* Class Child redefines the methods of interest. Will overrides apply ?
*/
class Child extends Base {
/**
* A child private method. Does it override the base method ?
*/
private function priv() {
echo __CLASS__ . PHP_EOL;
}
}
$f = new Child();
// Non-static method calls on an instance should invoke the class method.
$f->callPriv();
$f->call('priv');
$f->reflect('priv');
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
Base
Base
Child