在PHP中有没有办法为两个不同的,无关的接口输入提示?例如:
interface errorable {
function error($msg);
}
interface recordable {
ssh_for_recorder();
}
class uploader__module extends base__module implements errorable,recordable {
public function ssh_for_recorder() {
return new ssh2;
}
public function error($msg) {
$this->errors[] = $msg;
}
public function upload() {
$recorder = new recorder($this);
$recorder->run();
}
}
class recorder {
private $ssh2;
private $module;
private function upload() {
if (!$this->ssh2) {
$this->module->error("No SSH2 connection");
}
}
public function __construct({recordable,errorable} $module) {
$this->module = $module;
$this->ssh2 = $module->ssh_for_recorder();
}
}
正如您在上面的代码中所看到的,记录器类期望其模块能够同时运行error()和ssh_for_recorder(),但这些是由不同的接口定义的.不可能是不可记录的,反之亦然.
这样做有最好的做法吗?我正在考虑创建一个从可记录和错误扩展的接口,并具有upload__module实现,但我不知道该怎么称呼它.
不,这在PHP中是不可能的.
还有其他支持此功能的语言(主要是功能性的)称为联合类型(http://en.wikipedia.org/wiki/Sum_type).