我正在尝试创建一个作曲家包&我理解基本工作流程,如创建composer.json,自动加载和在src
目录下创建类。
我有一个小的编程误解是,我正在阅读的几乎所有其他软件包都有接口和实现它们的类。我不明白在这种情况下需要接口以及为什么我们需要它们。我从未使用过界面,或者我不确定我是否理解它的一般用例。如果有人能帮我理解它会很好。
除了我在作曲家的背景下的另一个问题,我如何在创作时测试/运行作曲家项目?
除了我所指的这个项目command
内有一个src
目录,我也不明白这个或它的用例的重要性。我想这与symfony php console命令有关。
此外,源代码中还有一个bin
目录,现在该如何有用。
很抱歉,如果我在这里天真,但我只是想了解哪些组件落在哪里,为什么会这样。在创建composer.json
答案 0 :(得分:2)
你一次提出了很多问题,但我会尝试至少解决接口问题,因为我认为这是最重要的问题。
接口主要与Dependency Injection一起使用。他们定义方法而不实际关注方法是如何实际实现的。类可能依赖于接口而不是实际(具体)类,这允许以简单的方式交换组件。下面是一个如何使用接口的示例。
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
等的帖子。甚至可以写一个{ {1}}只返回一个可用于测试目的的预定数量的帖子。然后,您可以在博客中使用DymmyPostFetcher
的任何实现,如下例所示。
PostsInterface
如果您不熟悉依赖注入,我强烈建议您学习它,因为它在编写模块化代码时特别有用。