我想在类中使用特征,只有在条件满足时才使用。例如:
trait T
{
}
class A
{
if ($condition) {
use T;
}
}
我知道我不能直接在课堂上使用if
。所以,我正在寻找一种方法来使用与上述类似的特征。有可能吗?
答案 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;
}