} class B extends A { public function func($str) { static $avoid_crash = 0; if ($avoid_crash++ == 1) { print "This method shouldn't be called when using parent::func!\n"; return; } call_user_func_array(array($this, 'parent::func'), array($str)); } private function func2($str) { var_dump(__METHOD__ . ': ' . $str); } protected function func3($str) { var_dump(__METHOD__ . ': ' . $str); } } class C extends B { public function func($str) { parent::func($str); } } $c = new C(); $c->func('This should work!');
<?php abstract class B { private function priv() { echo "B::priv\n"; } function func() { $this->priv(); var_dump(get_class_methods($this)); } } class C extends B { private function priv() { echo "C::priv\n"; } } $obj = new C(); $obj->func();