存储库模式php - 需要接口吗?

时间:2018-01-25 07:14:30

标签: php repository-pattern

我有以下代码,我不知道如何使用界面,我觉得我不需要它,但我想 我只使用composer进行自动加载而没有任何框架

服务代码(从示例中的批处理文件运行)

try {
    $test = new testClass();  //how do I put here the interface , i dont want to put it here
    $test->run();

}
catch(\Exception $e) {
    echo  $e->getMessage() . "\n";
    die;
}

测试类:

class TestClass extends AbstractClass
{
    private $_repo;

    public function __construct(RepositoryInterface $repo)
    {
        parent::__construct();
        $this->_repo =       $repo;
    }


    public function run(){

    }

抽象类

abstract class AbstractClass
{

    protected $logger;

    protected $db;

    public function __construct()
    {
        Configuration::config();
        $this->db =  PDOConnection::dbConnect();

    }

它不起作用,现在我只是调用直接实现接口的testRepository,而不调用接口

那么如何将接口注册到构造函数,或者我必须在每个地方调用它来启动一个testclass对象

感谢

3 个答案:

答案 0 :(得分:0)

selMonth = Format(DateSerial(Year(Date), Month(Date), Day(Date) - 7), _ "m/d/yyyy") With Sheet1 '/* change to your actual sheet */ '/* reference last row to column A */ lr = .Range("A" & .Rows.Count).End(xlUp).Row Set myRange = .Range("A1:AY" & lr) myRange.AutoFilter 1, "<=" & selMonth 方法构造中需要一个参数。

Jan 16
Jan 17
Jan 18
Jan 19
Jan 20
**no Jan 21**
Jan 22
**no Jan 23**
Jan 24

当你创建类的对象时,你没有使用任何参数:

TestClass

然后在public function __construct(RepositoryInterface $repo) 中添加参数或更改$test = new testClass(); 方法,如

new testClass($repo);

答案 1 :(得分:0)

我认为你错过了一些理解。 @ J.Litvak的回答也没有提供这个信息。

class TestClass extends AbstractClass
{
    private $_repo;

    public function __construct(RepositoryInterface $repo)
    {
        parent::__construct();
        $this->_repo =       $repo;
    }
}

这个类有一个构造函数,它需要一个实现RepositoryInterface的对象。

因此,您传递的变量必须是一个对象,并且它必须使用Interface。和我一起到目前为止?

这意味着以下代码不正确。

try {
    $test = new testClass(); 
    $test->run();
} catch(\Exception $e) { ... }

使用$test实例初始化TestClass变量的行必须是RepositoryInterface函数使用TestClass::__construct的对象。

所以,在某个地方,你必须创造或拥有:

class CustomRepository implements RepositoryInterface
{
    public function findAll() { ... }
}

现在,将您的try{} / catch () {}更新为以下内容:

$customRepository = new CustomerRepository();

try {
    $test = new testClass($customRepository); 
    $test->run();
} catch(\Exception $e) { ... }

哪个适用,CustomRepository implements interface TestClass::__construct package recogniseKeywords; import java.io.File; import java.io.FileInputStream; import java.util.Arrays; import org.apache.poi.xwpf.extractor.XWPFWordExtractor; import org.apache.poi.xwpf.usermodel.XWPFDocument; public class KeywordsRecognition { public static void listFilesForFolder(final File folder) { String[] files = {}; int fileSize = 0; String[] extensions = {".doc", ".docm", ".xls"}; for (final File fileEntry : folder.listFiles()) { if (fileEntry.isDirectory()) { listFilesForFolder(fileEntry); } else { for(int i=0; i<extensions.length; i++) { //Check if contains one of the extensions and isn't a temporary file(~$) if (fileEntry.getName().contains(extensions[i]) && !fileEntry.getName().startsWith("~$")) { System.out.println(fileEntry.getName()); files[fileSize] = fileEntry.getName(); fileSize++; } } } } } public static void main(String[] args) throws Exception { String[] keywords = {"Performance Enhancement", "Functional Specification", "Technical Specification", "Faults", "Arval", "Vehicle", "Fines", "Insurance"}; final File folder = new File("C:/work"); listFilesForFolder(folder); System.out.println(Arrays.toString(files)); } } } 参数{/ 1}}。

查看一些PHP文档:

答案 2 :(得分:0)

我用PHP DI模块想出来并通过composer

注入它

类似的东西:

return [
    // Bind an interface to an implementation
    RepositoryInterface::class => object(Repository::class),

];