我正在尝试创建一个作曲家包&我了解创建作曲家的基本工作流程。在src
目录下自动加载和创建类。
我有一个小的编程误解是,几乎所有我正在阅读的其他包都有接口和实现它们的类。我不明白在这种情况下需要接口,也不明白我们为什么需要接口。我从来没有使用过接口,或者我不确定我是否理解它的一般用例。如果有人能帮我理解的话就太好了。
旁边的另一个问题,我在上下文的作曲家是我如何测试/运行一个作曲家项目,而我创建它?
除此之外,我所指的项目在src
中有一个command
目录,我不理解这个或它的用例的意义。我猜它与symfony php控制台命令有关。
也有一个bin
目录在源代码,现在是如何有用的。
对不起,如果我是天真的在这里,但我只是试图了解哪些组件落在哪里,为什么是这样的。我在网上找不到一个作曲家教程,过去创建composer.json
你一次问了很多问题,但我至少会尝试解决接口问题,因为我相信这是最重要的。
接口主要用于依赖注入。他们定义方法而不关心方法是如何实现的。一个类可以依赖于一个接口而不是一个实际的(具体的)类,这样可以方便地交换组件。下面是一个如何使用接口的例子:
interface PostsInterface {
public function getPosts();
}
class JsonPostFetcher implements PostsInterface {
public function getPosts() {
// Load posts from JSON files here
}
}
class MySqlPostFetcher implement PostsInterface {
public function getPosts {
// Load posts from a MySQL database
}
}
class Blog {
public function __construct(PostsInterface $fetcher) {
// Load posts from either JSON or a database
// depending on which fetcher is provided
$posts = $fetcher->getPosts();
}
}
使用这种方法,任何人现在都可以编写自己的代码来提供来自外部API ApiPostFetcher
, SQLite数据库SqlitePostFetcher
,序列化PHP文件SerializedPostFetcher
等的帖子。甚至可以编写一个DymmyPostFetcher
,它只返回一个预先确定的帖子数组,可以用于测试目的。然后,您可以在您的博客中使用PostsInterface
的任何实现,如下面的示例所示。
$fetcher = new JsonPostFetcher(); // You can provide different fetchers here.
$blog = new Blog($fetcher);
如果您不熟悉依赖注入,我强烈建议您学习它,因为它在编写模块化代码时特别有用。