Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何实现不同类型参数的接口方法_Php_Oop_Design Patterns_Interface - Fatal编程技术网

Php 如何实现不同类型参数的接口方法

Php 如何实现不同类型参数的接口方法,php,oop,design-patterns,interface,Php,Oop,Design Patterns,Interface,tl;dr 我需要有TypeInterface::generateId($doc),其中对于实现接口的每个类都是不同的。 我该如何实现这一目标 嗨,伙计们 我被这个弄得头昏脑胀 我有一个接口(TypeInterface),它需要一个像TypeInterface::generateId(Document$doc)这样的方法,该方法将从doc规范中返回生成的id,目前为止还不错 问题 这几个文档有共同的方法,如::schema(),但所有属性都是特定于每个文档的。 因此,我制作了以下接口 Doc

tl;dr

我需要有
TypeInterface::generateId($doc)
,其中
对于实现接口的每个类都是不同的。 我该如何实现这一目标


嗨,伙计们

我被这个弄得头昏脑胀

我有一个接口(
TypeInterface
),它需要一个像
TypeInterface::generateId(Document$doc)
这样的方法,该方法将从doc规范中返回生成的id,目前为止还不错

问题

这几个文档有共同的方法,如
::schema()
,但所有属性都是特定于每个文档的。 因此,我制作了以下接口

  • DocumentInterface—保存所有文档必须具有的方法
  • ObjectAInterface—保存文档类型A的属性的方法
  • ObjectBInterface—保存文档类型B属性的方法
因此,类TypeA(实现
TypeInterface
)生成了带有ObjectAInterface的一些属性/方法的ID,而ObjectBinInterface对于TypeB类没有这些属性/方法

我打算:

public function getDocument(TypeInterface $core, DocumentInterface $document)
{
  $this->client->index([
    'index' => $core->getIndex()->name(),
    'type' => $core->name(),
    'id' => $core->generateId($document), // HERE!
    'body' => $core->schema(),
  ]);
}
因此,
$core->generateId($document)
应该是通用的,可以处理所有的
类型接口
,但是特定的类型A应该与文档有某种关系

问题:

  • 我怎样才能做到这一点
  • 这些案例中的最佳实践
  • 也许我只是想错了,有更好的方法,或者根本没有
代码

我用示例代码创建了一个简单的要点