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 \Ybean\index();

有第一行的#!usr/bin/evn php,這樣的話就可以直接這樣這行./bin/spider 他會識別直接用PHP來執行

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM