php - Is there a way to dynamically change the name of the class being autoloaded?

731

For instance, say I have the following code.

$foo = new bar();

And an autoloader like this.

function autoload($class_name) {
    $class_file_name = str_replace('_', '/', $class_name) . '.php';
    if (file_exists($class_file_name)) {
        include($class_file_name);
    }
}

But the class I really want to load is in the folder 'foo/bar.php', and the real class name is actually foo_bar. Is there a way to dynamically change the name of the class being autoloaded? For instance, something like this?

function autoload(&$class_name) {
    $class_name = 'foo_' . $class_name;
    $class_file_name = str_replace('_', '/', $class_name) . '.php';
    if (file_exists($class_file_name)) {
        include($class_file_name);
    }
}

I know if something like this is possible, it is not exactly best practice, but I would still like to know if it is.

661

Answer

Solution:

No. You could load a different file. You could load no file. You could load several files. But after autoloading, PHP expects the class to exist like it was called.

If you call a class X, you can't magically give PHP class Y.

Maybe it's enough to set up the filesystem like that, but still keep literal class names?

PS
I've wanted this for a while too. When I didn't have access to namespaces yet. Now that I do, all my problems are solved =) If you do have access to namespaces, you should 'study' PSR-0.

857

Answer

Solution:

Maybe you can use class_alias, this way:

  • PHP requires class X
  • You want load class Y instead.
  • You create an alias X for class Y, so X will behave like Y.

E.g.:

function autoload($class_name) {
    $real_class_name = 'foo_' . $class_name;
    $class_file_name = str_replace('_', '/', $real_class_name) . '.php';
    if (file_exists($class_file_name)) {
        include($class_file_name);
        class_alias($real_class_name, $class_name);
    }
}

Hope it can help you.

People are also looking for solutions to the problem: php - Hide caption text in slider when underlying image slides away #mootools

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.