创建Composer包

时间:2015-09-18 09:20:39

标签: php symfony oop interface composer-php

我正在尝试创建一个作曲家包&我理解基本工作流程,如创建composer.json,自动加载和在src目录下创建类。

我有一个小的编程误解是,我正在阅读的几乎所有其他软件包都有接口和实现它们的类。我不明白在这种情况下需要接口以及为什么我们需要它们。我从未使用过界面,或者我不确定我是否理解它的一般用例。如果有人能帮我理解它会很好。

除了我在作曲家的背景下的另一个问题,我如何在创作时测试/运行作曲家项目?

除了我所指的这个项目command内有一个src目录,我也不明白这个或它的用例的重要性。我想这与symfony php console命令有关。

此外,源代码中还有一个bin目录,现在该如何有用。

很抱歉,如果我在这里天真,但我只是想了解哪些组件落在哪里,为什么会这样。在创建composer.json

之后,我无法在线找到作曲家教程

1 个答案:

答案 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

如果您不熟悉依赖注入,我强烈建议您学习它,因为它在编写模块化代码时特别有用。