<?php

namespace AppBase {
	
	interface ILoader {
		function bar();
	}

	class App {
	    protected $loader;
	
	    public function __construct(ILoader $loader)
	    {
	        $this->loader = $loader;
	    }
	    
	    public function foo() {
	    	$this->loader->bar();
	    }
	}
	
	class Loader implements ILoader {
		function bar() {
			echo 'Bark!';
		}
	}
}

namespace AppExample {

	class App extends \AppBase\App {}
	
	class Loader extends \AppBase\Loader {
		function bar() {
			echo 'Huyark!';
		}
	}

}

namespace {
	$loader1 = new \AppBase\Loader();
	$app = new \AppExample\App($loader1);
	$app->foo();
	
	$loader2 = new \AppExample\Loader();
	$app = new \AppExample\App($loader2);
	$app->foo();
}