目标
实现一个composer包。用php实现常用算法;
准备工作
- Composer Hub账号。
- GitHub 账号。
- git
- composer 命令
创建项目
- 在项目 目录下初始化composer.json;
可以通过 composer init 初始化扩展包,然后修改composer.json增加自动加载规范(命名空间和目录映射关系)和环境要求。
我的composer.json:{ "name": "wangan/algorithm", "description": "algorithm", "type": "library", "license": "MIT", "authors": [ { "name": "wangan", "email": "wangan@qutoutiao.net" } ], "minimum-stability": "dev", "require": {}, "autoload": { "psr-4": { "algorithm\\": "src/Algorithm" } } }
- 创建目录结构
在 src/Algorithm/ 下创建BinarySearch.php,实现二分法查找;<?php /** * Created by PhpStorm. * User: admin * Date: 2019/6/20 * Time: 10:54 */ namespace algorithm; class BinarySearch { /** * 使用循环实现, 返回index * @param array $findDate * @param int $searchVal * @return int */ public static function binarySearch(array $findDate, int $searchVal) { $count = count($findDate); if($count<1){ return -1; } $low = 0; $high = $count - 1; while ($high >= $low){ $mid = (int)(($low+$high)/2); if ($findDate[$mid] == $searchVal){ return $mid; } if($findDate[$mid] > $searchVal){ $high = $mid-1; } if($findDate[$mid] < $searchVal){ $low = $mid+1; } } return -1; } /** * 递归实现 * 终止条件:找到了值,或者low>high * @param array $searchDate * @param int $searchVal * @param int $low * @param int $high * @return int */ public static function binarySearchInternally(array $searchDate, int $searchVal, int $low, int $high) { if($low>$high){ return -1; } $mid = (int)(($low + $high)/2); if($searchDate[$mid] == $searchVal){ return $mid; } if($searchDate[$mid] > $searchVal){ $high = $mid-1; return binarySearchInternally($searchDate, $searchVal, $low, $high); } if($searchDate[$mid] < $searchVal){ $low = $mid+1; return binarySearchInternally($searchDate, $searchVal, $low, $high); } } }
- 运行
composer install
查看 vendor/composer/autoload_psr4.php 中生成命名空间和目录的映射关系
生成composer包
- 将上述构建的项目提交到github
- 提交的composer hub
将 git地址 粘贴 到
测试自己的composer 包
我在另一个laravel项目中下载我的composer包
composer require wangan/algorithm
可以在vendor看到刚刚下载的扩展包
参考文档:https://blog.csdn.net/guyan0319/article/details/79596211
项目git地址:https://github.com/wangxiaoan/algorithm_composer
包地址:https://packagist.org/packages/wangan/algorithm