在PHP中有条件地使用特征

时间:2013-11-05 06:47:30

标签: php traits

我想在类中使用特征,只有在条件满足时才使用。例如:

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

我知道我不能直接在课堂上使用if。所以,我正在寻找一种方法来使用与上述类似的特征。有可能吗?

4 个答案:

答案 0 :(得分:8)

您可以使用T创建一个类,该类在不使用T的情况下扩展该类。然后在您使用该类的代码中执行if和instanciate一个或另一个类。

<?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 */

答案 1 :(得分:2)

只要可以在类根目录上评估您的状况,就可以执行以下操作:

if (<condition here>) {
    class BaseFoo
    {
        use FooTrait;
    }
} else {
    class BaseFoo {
    }
}

class Foo extends BaseFoo
{
    // common properties
}

答案 2 :(得分:1)

trait T {
function getType() { 
     if($condition){ /*somthing*/ 
          }else{ 
           throw new Exception('some thing.') 
        } }
function getDescription() { /*2*/ }
}
class A {
use T;
/* ... */
}

答案 3 :(得分:1)

您可以将条件代码(如调试函数)外包到特征中并执行类似的操作。

//your Trait

if($isModeDbg){
    trait Dbg{
        function dbg(mssg){
            debugbarOrSomethingSimilar(mssg);
        }
    }
}else{
    trait Dbg{
        function dbg(mssg){
        }
    }
}

//your class
class Something{
  use Dbg;
}