实现一个自己的composer包

目标

实现一个composer包。用php实现常用算法;

 

准备工作

创建项目

  1. 在项目 目录下初始化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"
            }
        }
    
    }
    

     

  2. 创建目录结构
    在  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);
            }
        }
    
    }
  3. 运行
    composer  install

    查看 vendor/composer/autoload_psr4.php 中生成命名空间和目录的映射关系

 

生成composer包

  1. 将上述构建的项目提交到github
  2. 提交的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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值