我试图获得动态特征的效果。
我想
class API {
private $_source = "some text";
public function __construct($apiSource){
switch($apiSource){
case "a":
use APIa;
break;
case "b":
use APIb;
break;
default:
break;
}
}
public function whatAPI(){
return "none";
}
public function decode(){
return explode(" ", $this->_source);
}
}
trait APIa {
public function whatAPI(){
return "APIa";
}
public function decode(){
return json_decode($this->_source);
}
public function onlyForA(){
return "something";
}
}
trait APIb {
public function whatAPI(){
return "APIb";
}
}
使用API :: source可以使用任何(APIa
/ APIb
)。它会被称为:
$api = new API()
$api->whatAPI(); // "none"
$api = new API("a")
$api->onlyForA(); // "something"
不幸的是,use
无法从函数中加载。
如果是API::decode()
,APIa
应该覆盖它,APIb
应该继承它。
我尝试在API
中使用私有函数来保存apiClass
,然后将其用作$this->apiClass->func()
,但开发和维护过于烦人。< / p>