Home » Php » Instantiating class by string using PHP 5.3 namespaces

Instantiating class by string using PHP 5.3 namespaces

Posted by: admin April 23, 2020 Leave a comment


I can’t get around an issue instantiating a new class by using a string variable and PHP 5.3. namespaces. For example, this works;

$class = 'Reflection';
$object = new $class();

However, this does not;

$class = '\Application\Log\MyClass';
$object = new $class();

A fatal error gets thrown stating the class cannot be found. However it obviously can be instantiated if using the FQN i.e.;

$object = new \Application\Log\MyClass;

I’ve found this to be aparrent on PHP 5.3.2-1 but not not in later versions. Is there a work around for this?

How to&Answers:
$class = 'Application\Log\MyClass';
$object = new $class();

The starting \ introduces a (fully qualified) namespaced identifier, but it’s not part of the class name itself.


Another way to achieve the same result but with dynamic arguments is as follows. Please consider the class below as the class you want to instantiate.


// test.php

namespace Acme\Bundle\MyBundle;

class Test {
    public function __construct($arg1, $arg2) {

And then:



(new ReflectionClass('Acme\Bundle\MyBundle\Test'))->newInstanceArgs(['one', 'two']);

If you are not using a recent version of PHP, please use the following code that replaces the last line of the example above:

$r = new ReflectionClass('Acme\Bundle\MyBundle\Test');
$r->newInstanceArgs(array('one', 'two'));

The code will produce the following output:

string(3) "one"
string(3) "two"


I had the same problem and I have found some way around this problem. Probably not very efficient, but at least works.

function getController($controller)
    return new $controller;

$object = getController('Application\Log\MyClass');