花了两天时间把《Modern PHP》看了一遍,深有感触~~~
现在看看以前写的代码简直就是一坨屎(没看这本书之前最多是半坨屎23333)。代码风格、组件思想、包管理等等等等,无颜以对写的代码。本来也打算再次重构一些项目的,现在这种愿望更强了。。好了,废话不多说,开始着手写一个IMDb组件,这个组件用于指定一个title值,便可返回该部电影的详细信息。

事实上我就是跟着《Modern PHP》的Create-PHP-Components章节一步一步做的。

目录结构

这里请参考 https://github.com/thephpleague/skeleton 非常详细
值得说明的是,准备写的IMDb组件没有tests

composer.json

这是IMDb的composer.json, 并不是很完善。也是参考上述示例项目的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"name": "xu42/imdb",
"description": "Crawl IMDb movie rating, content rating, release date, poster, presentation, director, actor, duration and other information",
"keywords": [
"xu42",
"imdb"
],
"homepage": "https://github.com/xu42/IMDb",
"license": "MIT",
"authors": [
{
"name": "xu42",
"homepage": "http://xu42.cn",
"role": "Developer"
}
],
"require": {
"php" : "~5.5|~7.0"
},
"autoload": {
"psr-4": {
"Xu42\\Imdb\\": "src"
}
}
}

功能实现

这个组件的功能很早就实现了,但之前写的就是一坨屎, 改之后是这样的, 虽然还不是很优雅,但相比之下,还是看着舒服多了。

  1. 命名空间的问题,不应与已知的重复,这个可以到 packagist 搜一下。
  2. 代码规范的问题,推荐PHP编码规范(中文版) ,英文好的话推荐直接看原版。
    之后,简单的自己在本地测试一下(并不是真正意义上的测试),编写一个test.php
    1
    2
    3
    4
    <?php
    require_once './vender/autoload.php';
    $oneTitle = new \Xu42\Imdb\OneTitle();
    print_r($oneTitle->getMsgOfOneTitle('tt0111161'));

然后测试

1
2
$ composer install
$ php test.php

( ⊙o⊙ )哇,测试没有问题。

代码托管 & 提交组件

这一步也没什么问题,需要注意的是,需要给当前版本打tag

1
$ git push origin 1.0.0

packagist , 直接使用Github账号授权登陆。
点击Submit,然后在表单中填入Github项目地址,再点Check,之后会提示你本项目没有自动更新,跟着引导去Github项目设置一下Webhooks就好了。

之后,在任意一台电脑执行composer require xu42/imdb就可以引入啦,It’s cool!

晚些再把大学英语四六级也做成组件, Cool!