我有以下代码,我不知道如何使用界面,我觉得我不需要它,但我想 我只使用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对象
感谢
答案 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),
];