PHP常用第三方包,php第三方包管理
前言
在編寫程序的時候,我們會用到別人的第三方包,俗稱輪子。如何正確引入一個第三方的包,且正確合理的放置,是一個值得規范的事情。
傳統的包引入include "the/path/of/file.php";
require "the/path/of/file.php";
include_once "the/path/of/file.php";
require_once "the/path/of/file.php";
function_name();
?>
優點:我們比較熟悉包內結構,文件位置
缺點:我們必須清楚文件結構;引入大量的inlude,require語句;不能實現懶加載
新的包引入方式
__autoload()魔術方法:當運行時調用了當前沒有聲明過的類時,自動運行該函數。<?php
function __autoload($class_name){
require "./new_package/class2.php";
}
(new hello())->sayHello();
我們可以在我們文件中重新定義這個函數,并添加我們函數中的邏輯去實現文件的加載,這種方式屬于懶加載,一定程度上能節省資源。
__autoload()函數必須傳入參數(盡管我們也許不會使用)
在原本autoload中,同一個文件中只能支持同時存在一個autoload函數,重復定義會引起panic。
autoload的改良
在php5.5后,引入了spl改良版的autoload系列函數,使用spl_autoload_register或者set_include_path和spl_autoload的組合可以很快引入某路徑下的類。<?php
//
//spl_autoload_register(function ($class_name){
// if ($class_name === 'hello'){
// include "./new_package/class2.php";
// }
//});
set_include_path("./new_package/"); //這里需要將路徑放入include
spl_autoload("class2");
(new hello())->sayHello();
優點:懶加載,重新定義/抽象了require和include
缺點:仍無法解決大量的引入代碼問題;可能產生循環引用
包管理工具Composer
composer是php項目中的一個開源第三方包管理工具,是一個讓人眼前一亮的工具,它將autoload的思想發揮到了新的層次。
一個使用composer來管理第三方包的項目通常會在項目根目錄下包含vender文件夾,里面放有我們的第三方包。
composer使用方法:composer init//初始化一個目錄成為composer管理項目
composer require "[email?protected]*"
//如果已經存在別人的composer.json文件
composer install
//升級版本
composer update
//刪除
composer remove "xxxx"
composer通過生成一個總的引入類來引入所有的第三方依賴,我們只需要在整個項目的一個地方引入require "./vender/autoload.php";這樣一個文件,就會去自動執行整個需要文件的執行。
composer.json中的autoload和autoload_dev說明了整個項目中的依賴關系的命名關系"autoload": {
"psr-4": {
"App\": "app/"
},
"classmap": [
"database/seeds",
"database/factories"
]
},
我們可以直接使用AppHello來代表在app目錄下的Hello類,composer會自動實現命名空間到文件目錄的轉換。
這篇博客中有更詳細的命名映射方法。
composer引入的版本號表達式意義實例含義數字指定版本1.2.3下載1.2.3版本
~符號維持小版本~1.2.3下載1.3.0前的版本
^符號維持大版本^1.2.3下載2.0.0前的版本
*符號任意版本1.2.*下載1.2中任意一個版本
運算符運算符含義>=1.2.3下載大于1.2.3的版本
@符號選擇分支下載dev分支中的1.2.3版本
多個條件支持,和|分割,代表and or邏輯運算,如composer require xxx [email?protected],!=1.2.3
注意
不要隨意改動composer.lock文件中的內容
注意將vender文件夾從版本控制中去除
總結
以上是生活随笔為你收集整理的PHP常用第三方包,php第三方包管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java第三方包_java客户端引入第三
- 下一篇: PHP pcre backtrack问题