phptraits

Use a trait conditionally in PHP


I want to use a trait in a class, only if a condition is satisfied. For example:

trait T
{
}
class A
{
    if ($condition) {
        use T;
    }
}

I know I can't use if directly in class. So, I'm looking for a way to use traits conditionally similar to the above. Is it possible?


Solution

  • You can create a class with use T which extends the class without use T. And then in your code where you use the class do an if and instantiate the one or the other class.

    <?php
    
    trait T {
    }
    
    class A {
    }
    
    class B extends A {
        use T;
    }
    
    // In an other part of code
    $obj = null;
    
    if($condition) {
        $obj = new B();
    } else {
        $obj = new A();
    }
    
    /* EOF */