zoukankan      html  css  js  c++  java
  • composer理解,及自动加载的一些方法和思路

    composer:是用来管理依赖的。

    1、长久以来,PHP的开源方式都是项目级的,就是说我一开源就是一个项目,比如一整套的CMS,一个框架,如Codeigniter。为啥呢?其中一个很重要的原因是你不好拆开来,如果拆开来的话,没有一个有效的管理工具组合起来,导致拆开的小模块大家无人问津。

    然后Composer就出现了,它负责去管理大家开源的各个小模块,有效的整合到一起,使之成为一个完整的项目。

    比如说 Laravel 实际上就是由好多的小模块组成的,比如说实现路由模块是由symfony/routing完成的;比如说记日志是由 monolog/monolog 实现的。

    当你用 composer 安装 laravel 的时候,composer 会自动检测所需依赖并下载

    2、composer 是一个PHP代码依赖管理工具之一
    比方说你的项目需要用到PHPmail这个类库,只要按照composer的格式,composer
    就能自动帮你拉下这个代码库到你项目中.

    3、我的理解:
    管理依赖,需要什么组件的时候,使用composer require - 来下载,将在需要的项目目录下自动创建一个vender的目录(每个项目都会生成vender文件夹和两个文件composer.json和composer.lock),里面放置需要的所有组件,该项目如果需要用到这些组件的话,在入口文件中包含上vender的autoload.php自动加载文件

      require_once(__DIR__ . '/vender/autoload.php');

    这样的话,有这个自动加载文件,就可以在项目中随意new组件。所以composer的作用就是管理某个项目所用到的所有组件,将其整合起来方便使用。

    自动加载 

    如果是组件的话,都会放在vender目录下,所包含的autoload.php会处理,但是如果要自动加载自己项目中的文件的话,方法一是写一个自己的自动加载文件,方法二是在配置文件composer.json改写

     1 {
     2     "require": {
     3         "kiddyu/beanbun": "^1.0",
     4         "symfony/finder": "^4.1",
     5         "symfony/dom-crawler": "^4.1"
     6     },
     7     "repositories": {
     8         "packagist": {
     9             "type": "composer",
    10             "url": "https://packagist.phpcomposer.com"
    11         }
    12     },
    13     "autoload": {
    14         "psr-4": {"Ybean\": "src"}//意思为定义的Ybean命名空间从目录src下取
    15     },
    16     "require-dev": {
    17     }
    18 }

    另外一个配置文件composer.json可供参考

     1 {
     2     "name": "itititi/tplapidoc",
     3     "description": "基于自定义模板,生成你想要的api文档。简单易用且具备可拓展性。",
     4     "keywords": ["php", "tplapidoc", "api", "doc"],
     5     "type": "library",
     6     "license": "MIT",
     7     "authors": [
     8         {
     9             "name": "peng.yu",
    10             "email": "peng.yu@qjfu.cn",
    11             "homepage": "https://github.com/itititi",
    12             "role": "Developer"
    13         }
    14     ],
    15     "bin": [
    16         "bin/tplapidoc"
    17     ],
    18     "autoload": {
    19         "psr-4": {"TplApidoc\": "src/"}
    20     },
    21     "prefer-stable": true,
    22     "require": {
    23     },
    24     "require-dev": {
    25         "phpunit/phpunit": "@stable" 
    26     },
    27     "scripts": {
    28         "test": [
    29             "phpunit --colors=always"
    30         ]
    31     }
    32 }

    所以重要的一行配置即为:

    1 "autoload": {
    2         "psr-4": {"Ybean\": "src"}//意思为定义的Ybean命名空间从目录src下取
    3  },

     有一个思路很牛的入口文件./bin/spider

     1 #!/usr/bin/env php
     2 <?php
     3 $autoload = array_reduce(range(1, 3), function($d, $v) {
     4     //$d[] = __DIR__ . '/'.str_repeat('../', $v).'autoload.php';
     5     return $d;
     6 }, [__DIR__.'/../vendor/autoload.php']);
     7 
     8 foreach($autoload as $file) {
     9     if (file_exists($file)) {
    10         define('PHPUNIT_COMPOSER_INSTALL', $file);
    11         break;
    12     }
    13 }
    14 
    15 unset($file);
    16 
    17 if (!defined('PHPUNIT_COMPOSER_INSTALL')) {
    18     fwrite(
    19         STDERR,
    20         'You need to set up the project dependencies using Composer:' . PHP_EOL . PHP_EOL .
    21         '    composer install' . PHP_EOL . PHP_EOL .
    22         'You can learn all about Composer on https://getcomposer.org/.' . PHP_EOL
    23     );
    24     die(1);
    25 }
    26 
    27 include PHPUNIT_COMPOSER_INSTALL;
    28 
    29 $ybean = new Ybeanindex();

    有第一行的#!usr/bin/evn php,这样的话就可以直接这样这行./bin/spider 他会识别直接用PHP来执行

  • 相关阅读:
    Lotus iNotes 用户启用标识符保险库
    Domino NSD日志诊断/分析
    从 Domino 7.x 升级到 Domino 8.0.1 后服务器性能下降
    Domino服务器命令表
    源码:使用LotusScript发送mime格式邮件
    构架Domino CA中心之一
    如何在DNS中增加SPF记录
    构架Domino CA中心之二
    在Ubuntu 8.04上安装Domino R8.02
    内存陷阱 驯服C++中的野指针 沧海
  • 原文地址:https://www.cnblogs.com/bigclould/p/9336331.html
Copyright © 2011-2022 走看看