When extending a class from another namespace that should instantiate a class from within the current namespace, you need to pass on the namespace.<?php // File1.phpnamespace foo;class A { public function factory() { return new C; }}class C { public function tell() { echo "foo"; }}?><?php // File2.phpnamespace bar;class B extends \foo\A {}class C { public function tell() { echo "bar"; }}?><?phpinclude "File1.php";include "File2.php";$b = new bar\B;$c = $b->factory();$c->tell(); // "foo" but you want "bar"?>You need to do it like this:When extending a class from another namespace that should instantiate a class from within the current namespace, you need to pass on the namespace.<?php // File1.phpnamespace foo;class A { protected $namespace = __NAMESPACE__; public function factory() { $c = $this->namespace . '\C'; return new $c; }}class C { public function tell() { echo "foo"; }}?><?php // File2.phpnamespace bar;class B extends \foo\A { protected $namespace = __NAMESPACE__;}class C { public function tell() { echo "bar"; }}?><?phpinclude "File1.php";include "File2.php";$b = new bar\B;$c = $b->factory();$c->tell(); // "bar"?>(it seems that the namespace-backslashes are stripped from the source code in the preview, maybe it works in the main view. If not: fooA was written as \foo\A and barB as bar\B)