<?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__ . " Private\n";
}
/**
* A protected base method
*/
protected function prot() {
echo __CLASS__ . " Protected\n";
}
/**
* Expose the private method
*/
public function callPriv() {
$this->priv();
}
/**
* Expose the protected method
*/
public function callProt() {
$this->prot();
}
/**
* Expose either method via call_user_func().
*/
public function call($method) {
call_user_func([$this, $method]);
}
/**
* Expose either method using Reflection.
*/
public function reflect($method) {
$rm = new ReflectionMethod($this, $method);
if (!$rm->isPublic()) {
$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__ . " Private\n";
}
/**
* A child protected method. Does it override the base method ?
*/
protected function prot() {
echo __CLASS__ . " Protected\n";
}
}
$f = new Child();
$f->callPriv();
$f->call('priv');
$f->reflect('priv');
echo "\n";
$f->callProt();
$f->call('prot');
$f->reflect('prot');
Parse error: syntax error, unexpected '[', expecting ')' in /in/Aoflo on line 41
Process exited with code 255.
Output for 5.0.0 - 5.0.5
Parse error: parse error, unexpected '[', expecting ')' in /in/Aoflo on line 41
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/Aoflo on line 12
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/Aoflo on line 12
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/Aoflo on line 12
Process exited with code 255.