- Output for 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.29, 8.2.0 - 8.2.21, 8.3.0 - 8.3.9
- Child Base Child
- Output for 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.33
- Child Child Child
<?php
class Base {
private function priv() {
echo "Base\n";
}
// Expose the private method directly.
public function callPriv() {
$this->priv();
}
// Expose the 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 extends Base {
// A child private method. Does it override the base method ?
private function priv() {
echo "Child\n";
}
// Expose the private method directly.
public function callPriv() {
$this->priv();
}
}
$f = new Child();
// Shouldn't instance method calls invoke the method from the instance class ?
$f->callPriv();
$f->call('priv');
$f->reflect('priv');