Is something like the following possible in PHP?
$blah = 'foo1';
class foo2 extends $blah {
//...
}
class foo1 {
//...
}
This gives an error.
I want to dynamically set $blah so I can extend whatever class I want.
Edit: The reason for wanting to do this because I wanted to use a function out of another class in a related class. In the end it would have been something like:
Final extends foo1 extends foo2 extends foo3 extends foo4 extends parent { ... }
In the end I decided to instantiate the other class within the class and use it. Not the best options because they both you 2 of the same classes, but this won't be used that often, so it will work for now.
I don't see how this would be particularly useful, but to answer your question... no. There's no way to dynamically do that because the generated class has to be instantiated before the variable is evaluated (if that makes sense).
To put it simply: The class must exist before the code can be properly executed.
you should have tried $$
If you don't have too many values for $blah, you could extend each one in a different file then
require_once "classes/foo_$blah.php"
Otherwise, you're stuck with the
eval()
solution... good luck with that... :)Using PHP overloading you can accomplish this to a certain extent.
I'm using this pattern inside a Drupal module for prefetching data from the cache.
I tested something with defines and barking:
the output is:
so the answer for "are variable class extensions possible?" is: No.
You're assuming here php executes top to bottom, but it doesn't quite work like that:
Now, although you can conditionally create classes:
You cant instantiate one at runtime from a variable:
There is a way to do it with Eval, but you really don't want to go there:
However, there is a more important question here:
Why the hell would you want to extend a different class at runtime
Anybody using your code will want to hold you down and whip you for that.
( Alternatively, if you're into whipping, do that eval trick )