Some may argue that this could be bad practice due to potential inconsistencies, however, I am wondering how (if possible) I could tell a class to extend another class, but only if it's defined.
I'm aware this doesn't work, but what I'm effectively after is:
class MyClass extends (class_exists('OtherClass') ? OtherClass : null)
Or maybe a function that would run in the constructor to set up the extend if the class exists.
I of course want to avoid..
if(class_exists('OtherClass'))
{
    class MyClass extends OtherClass
    {
        //The class
    }
}
else
{
    class MyClass
    {
        //The class
    }
}
.. because of the massive duplication of code.
I've looked for answers on Google and around the site, but found nothing - if I have duplicated a question however, do let me know.
You could create a middle-man class that's created inside the class_exists() condition, but without its own behavior:
if (class_exists('OtherClass')) {
    class MiddleManClass extends OtherClass { }
} else {
    class MiddleManClass { }
}
class MyClass extends MiddleManClass {
    // The class code here
}
This makes the class hierarchy include one more class, but has no duplicated code (has no code actually) and methods inside MyClass can reach the OtherClass with parent:: or $this as usual if it was available.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With