花了两天时间把《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"
        }
    }
}

功能实现

这个组件的功能很早就实现了,但之前写的就是一坨屎, 改之后是这样的, 虽然还不是很优雅,但相比之下,还是看着舒服多了。 1. 命名空间的问题,不应与已知的重复,这个可以到 packagist 搜一下。 2. 代码规范的问题,推荐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!