花了两天时间把《Modern PHP》看了一遍,深有感触~~~ 现在看看以前写的代码简直就是一坨屎(没看这本书之前最多是半坨屎23333)。代码风格、组件思想、包管理等等等等,无颜以对写的代码。本来也打算再次重构一些项目的,现在这种愿望更强了。。好了,废话不多说,开始着手写一个IMDb组件,这个组件用于指定一个title值,便可返回该部电影的详细信息。
事实上我就是跟着《Modern PHP》的Create-PHP-Components章节一步一步做的。
目录结构
这里请参考 https://github.com/thephpleague/skeleton 非常详细 值得说明的是,准备写的IMDb组件没有tests
composer.json
这是IMDb的composer.json, 并不是很完善。也是参考上述示例项目的
{
"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"
}
}
}
功能实现
这个组件的功能很早就实现了,但之前写的就是一坨屎, 改之后是这样的, 虽然还不是很优雅,但相比之下,还是看着舒服多了。
- 命名空间的问题,不应与已知的重复,这个可以到 packagist 搜一下。
- 代码规范的问题,推荐PHP编码规范(中文版) ,英文好的话推荐直接看原版。 之后,简单的自己在本地测试一下(并不是真正意义上的测试),编写一个test.php
<?php
require_once './vender/autoload.php';
$oneTitle = new \Xu42\Imdb\OneTitle();
print_r($oneTitle->getMsgOfOneTitle('tt0111161'));
然后测试
$ composer install
$ php test.php
( ⊙o⊙ )哇,测试没有问题。
代码托管 & 提交组件
这一步也没什么问题,需要注意的是,需要给当前版本打tag
$ git push origin 1.0.0
packagist , 直接使用Github账号授权登陆。 点击Submit,然后在表单中填入Github项目地址,再点Check,之后会提示你本项目没有自动更新,跟着引导去Github项目设置一下Webhooks就好了。
之后,在任意一台电脑执行composer require xu42/imdb
就可以引入啦,It’s cool!
晚些再把大学英语四六级也做成组件, Cool!