foo.'/'.$this->bar; } } class B extends A { private $foo="b"; protected $bar="b"; function getBstuff() { return $this->foo.'/'.$this->bar; } } $b=new B(); echo 'getBstuff: '.$b->getBstuff()."\ngetAstuff: ".$b->getAstuff()."\n"; /* Output: getBstuff: b/b getAstuff: a/b As you see, methods defined in class A use the private vars of class A even when used on an instance of child class B. Protected attributes however are overridden just like private ones. Notice that I do use overridden properties here. You could not access $foo from B if it was not overwritten there. */