 <p>You need to specify the inheritance with extends the base class <a href="http://php.net/manual/en/keyword.extends.php" rel="nofollow noreferrer">http://php.net/manual/en/keyword.extends.php</a></p> <p>Try this for your child class</p> <pre><code>//Child View Class class ChildView extends View{ public function html(){ //I get a fatal error here: calling img_cache on a non-object. //But it should have inherited this from the parent class surely? return '&lt;img src="'.$this-&gt;img_cache-&gt;thumb($this-&gt;data['img-src']).'"/&gt;'; } } </code></pre> <p>Also as @ferdynator says, you are instantiating the parent, not the child, so your <code>Main</code> class also needs to be changed to instantiate <code>ChildView</code>, not the parent <code>View</code></p> <pre><code>//Main class: class Main{ //construct public function Main(){ //get data from model $data = $model-&gt;getData(); //Get the view $view = new ChildView(); //Init view $view-&gt;init( $data ); //Get html $view-&gt;getHTML(); } } </code></pre>