'/posts', $callback);
respond('POST'
respond(
'POST'
'/posts/create'
,
$callback
);
|
respond(
'PUT' ,
📜
'/posts/[i:id]' , $callback );
//匹配多種請求方法:
respond( array ( ' POST' , 'GET' ),
$route , $callback );
//你或許也想在相同的地方處理請求 🜎 /[i:id] ' ,
function ( $request ,
$response ) {
switch ( // do something
}
});
對於小型專案來說這是很棒的,但當你把一個像這樣的函式庫用於大型應用程式時,你不得不遵守規矩,因為你的程式碼可能很快就變得不可維護。所以你最好搭配像Laravel或CodeIgniter這樣完全成熟的框架。
3. Ham – 帶有快取的路由庫
Ham也是一款輕量級的路由框架,但是它利用快取甚至獲得了更快的速度。它透過把任何I/O相關的東西緩存進XCache/APC。以下是一個例子:
1
2
3
4
5 111213 1415161718
require = new | Ham(
'example' );
$app
->config_from_file( ( ' /pork' ,
function ( $app ) {
return .
$hello= function ( $app ,
$name = 'world' ) {
return return.
array
(
'name'
};
$app ->route( '/hello/<string>'</string> ,
$hello );
$app ->route( '/' ,
$hello );
$app ->run();
,在大多數主機提供者提供的主機上它可能用不了。但如果你擁有一個安裝它們其一的主機,或者你可以操控你的web伺服器,你應該嘗試這款最快的框架。 4. Assetic – 資源管理 Assetic是一個PHP的資源管理框架,用於合併和減少了CSS/JS資源。下面是例子。
1 2 3 4 5 64 58 11
use AsseticAssetAssetCollection;
use AsseticAssetFileAsset;
|
use AsseticAssetGlobAsset; array
(
newGlobAsset (
'/path/to/js/*'
), '/path/to/js/*'),
newFileAsset() ;
//當資源被輸出時,程式碼會被合併
echo |
$js
->dump();
以這種方式合併資源是一個好主意,因為它可以加速網站。不僅總下載量減少了,也消除了大量不必要的HTTP請求(這是最影響頁面加載時間的兩件事)
5. ImageWorkshop – 帶層的圖片處理
ImageWorkshop是一個讓你操控有層圖片的開源庫。借助它你可以重新定義尺寸、裁剪、製作縮圖、打浮水印或做更多事情。以下是一個例子:
1
2
3
4
5 11
// 從norway.jpg圖片初始化norway層
$norwayLayer |
= ImageWorkshop::initFromPath(
'/path/to/images/norway.jpg'
'/path/to/images/norway.jpg');
// 從watermark.png圖片初始化watermark層(水印層)
$watermarkLayer= ImageWorkshop::initFromPath( '/p
$image = $norwayLayer ->getResult();
// 這是產生的圖片!
header( 'Content-type: image/jpeg' );
,5,5,5,5,005);
// We choose to show a JPG with a quality of 95%
exit
;
.簡化,如果你需要一些更強大的東西,你應該看看Imagine library! 6. Snappy – 快照/PDF庫 Snappy是一個PHP5庫,可以產生快照、URL、HTML、PDF。它依賴wkhtmltopdf binary(在Linux,Windows和OSX上都可使用)。你可以這樣使用它們:
| 1 2 34 1112
13
require_once'/path/to/snappy/src/autoload.php';
useKnpSnappyPdf;
//透過wkhtmltopdf binary路徑初始化庫
$c /usr/local/bin/wkhtmltopdf' );
//透過把Content-type頭設定為pdf來在瀏覽器中展示pdf |
header( 'Content-Type: application/pdf' ); ); 'Content-Disposition: attachment; filename="file.pdf"');
echo$snappy ->getOutput('http://www.github.com' );
可能不允許呼叫外部二進位程式。 7. Idiorm – 輕量級ORM庫 Idiorm是個人之前在本網站教程中用過最喜愛的一款。它是一款輕量級的ORM函式庫,一個建立在PDO之上的PHP5查詢建構器。借助它,你可以忘記如何書寫無聊的SQL:
1
2 3 10 11 12 13 | 14 15 1617
18 'user')
->where_equal('username',
'j4mie')
->find_one();
$>
'Jamie';
$user->save();
$tweets ->select( |
'tweet.*'
)
->join( 'user'
,
array (
'user.id' ,
'=' , 'tweet.user_id'
)) user.username' ,
'j4mie')
->find_many(); o tweet ) {
echo $tweet ->text;
}
Idiorm有一個姊妹庫叫Paris,Paris是基於Idiorm的Active Record實作。
8. Underscore – PHP的工具腰帶
Underscore是原始Underscore.js的一個介面 – Javascript應用的工具腰帶。 PHP版本沒有讓人失望,而且幾乎支援了所有原生功能。以下是一些例子:
1
2
3
4
5 111213
__::each(array(1, 2, 3),
|
function
( $num ) {
echo $num . ',' ; });
// 1,2,3,
$multiplier = 2;
__::each(
array
__::each( array
function ( $num ,
$index ) use ( $multiplier ) {
. ' . (
$num * $multiplier ) .
',' ;
});
// prints: 0=2,1=4,2=6,
( 1, 2, 3),
function ($memo ,
$num ) { return $memo + $num ; }, 0);
// 6
__::find( array (1, 2, 3, 4),
function ( $num ) {
return $num% 2 === 0; }); // 2
__::filter( , y
function ( $num ) {
return $num % 2 === 0; });
// array(2, 4)
化更為強大。 9. Requests – 簡單HTTP請求 Requests是一個簡化HTTP請求的函式庫。如果你跟我一樣,幾乎從來都記不住傳遞給Curl的各種各樣的參數,那麼它就是為你準備的:
1 23 5 6 |
7 89101112
11
12
(
'Accept'
=> 'application/json'
);
$options
=
array
( user'
| ,
'pass'
));
$request = Requests::get( 'https://api.github.com/gists' ,'https://api.github.com/gists' ,'https://api.github.com/gists' ,
$headers, $options );
var_dump( $ var_dump( $request ->headers[ 'content-type' ]);
// string(31) "application/json; charset=utf-8" request ->body);
// string(26891) "[…]"
、D PATCH HTTP請求,你可以透過陣列新增檔案和參數,並且可以存取所有對應資料。 10. Buzz – 簡單的HTTP請求庫
Buzz是另一個完成HTTP請求的函式庫。以下是一個例子:
1 2
3 4
5 $request = new BuzzMessageRequest( 'HEAD' ,
|
'/' , 'http://google.com');
$response
=c ent
=
newBuzzClientFileGetContents();
$client->send($request,
$response); |
echo $request ;
因為它缺乏文檔,所以你不得不閱讀源碼來獲知它支援的所有參數。
11. Goutte – Web抓取庫
Goutte是一個抓取網站和提取資料的函式庫。它提供了一個優雅的API,這使得從遠端頁面上選擇特定元素變得簡單。
1
2
3
4
5
6
4
58 11121314 15
require_once |
'/path/to/goutte.phar'
;
use ;
new Client();
$crawler = $client ->request(
'GET' ,
'http://www.symfony-project.org/' );
//點擊連結
$link =Link
$crawler ->selectLink(c $crawler->selectLink(cins = $client ->click( $link );
//使用一個類別CSS語法提取資料
$t = $crawler ->filter( );
echo"Here is the text: $t" ;
🜎
1 2 | 3 4 56
4
58
11
12
1314 1516171819202122
printf(
"Right now is %s"
, Carbon::now()->toDateTimeString());
printf(
"Right now in Vancouver is %s"
, Carbon::now(
'America/Vancover) ;
$tomorrow
= Carbon::now()->addDay();
$lastWeek
= Carprobon::now()->subWeek($lastWeek
= Carprobon::now()->subWeek(); = Carbon::createFromDate(2012)->addYears(4); |
$officialDate = Carbon::now()->toRFC2822String(); = Carbon::now()->toRFC2822String(); (1975, 5, 21)->age;
$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London' = Carbon::createFromDate(2012, 12, 21, 'GMT' );
//總是以UTC對比
//總是以UTC對比
$endOfWorld )) {
die
();::>Car ()) { echo 'Party!' ;
}
echo } // '2分鐘之前'
13. Ubench – 微型基準庫
Ubench 是用於評測PHP程式碼的微型函式庫,可監控(程式碼)執行時間和記憶體使用率。以下是範例:
1
2
3
4
5 111213 14151617181920
$bench= newUbench;
|
$bench
->start();
//執行一些程式碼
$bench取得執行消耗時間與記憶體
echo $bench->getTime(); // 156ms or 1.123s 🜎 // elapsed microtime in float
echo $bench ->getTime(false, '%d%s' );
// 156ms or 1s
// 156ms or 1s // 156ms or 1s
echo $bench
->getMemoryPeak(); // 152B or 90. $bench ->getMemoryPeak( true); // memory peak in bytes 內存峰值
echo $bench ->getMemoryPeak(false,
->getMemoryPeak(false, .33%
// 152B or 90.152Kb or 15.234Mb
//在結束標識處返回記憶體使用情況
echo🜎 / 152B or 90.00Kb或 15.23Mb
(僅)在開發時運行這些校驗是一個好主意。 14. Validation – 輸入驗證引擎Validation 聲稱是PHP庫裡最強大的驗證引擎。但是,它能名符其實嗎?看下面:
1 2 34 56 4 5 11 12 | 13 14 1516
17
18
19
20pd v;
//簡單驗證
$number
= 123;
v::numeric()->validate(
$number
);
//true
//鍊式驗證
$usernameValidator
= v::alnum()->noWhitespace()->length( ->validate('alganet');
//true
//驗證物件屬性 |
$user = new stdClass
'Alexandre'
;
$user ->birthdate =
'1987-07-01'
;
//在一個簡單鏈中驗證他的屬性
$userValidator
::string()->length(1,32))
()->minimumAge(18));
$userValidator ->validate( $user );
//true
你可以透過這個函式庫驗證你的表單或其他使用者提交的資料。除此之外,它內建了許多校驗,拋出異常和自訂錯誤訊息。 15. Filterus – 過濾庫 Filterus是另一個過濾庫,但它不僅可以驗證,也可以過濾匹配預設模式的輸出。以下是一個例子:
1 2 3
4 5 'string,max:5 ' );
$str =
'This is a test string' ;
$f ->validate(
$str );
// false
$f ->filter( $str
);
// 'This '
Filterus有很多內建模式,支援鍊式用法,甚至可以用獨立的驗證規則去驗證陣列元素。
16. Faker – 假資料產生器
Faker 是一個為你產生假資料的PHP函式庫。當你需要填入一個測試資料庫,或為你的web應用程式產生測試資料時,它能派上用場。它也非常容易使用:
1
2
3
4 1112 131415
//引用Faker 自動載入器
require_onceload. //使用工廠建立來建立FakerGenerator實例 |
$faker = FakerFactory::create();
//透過存取屬性產生假資料
//透過存取屬性產生假資料 ; // 'Lucy Cechtelar';
echo $faker
->address;
// Cartwrightshire, SC 88120- 6700"
echo $faker
->text;
// Sint velit % perkopinquealperk le
只要你繼續存取物件屬性,它將繼續傳回隨機產生的資料。
17. Mustache.php – 優雅模板庫 Mustache是一款流行的模板語言,實際上已經在各種程式語言中實現。使用它,你可以在客戶端或服務段重複使用模板。 正如你猜得那樣,Mustache.php 是使用PHP實現的。
1 2
$m = |
$m ->render('Hello { {planet}}',
array(
'planet'
=>
'World!'));
// "Hello World!" |
建議看一下官方網站Mustache docs 看更多進階的範例。 18. Gaufrette – 檔案系統抽象層
Gaufrette是一個PHP5函式庫,提供了一個檔案系統的抽象層。它使得以相同方式操控本地文件,FTP伺服器,亞馬遜 S3或更多操作變為可能。它允許你開發程式時,不用了解未來你將怎麼存取你的文件。
1 2 3 4 5 6 4 58 11 12 | 13
14 1516
17
useGaufretteFilesystem;
use GaufretteFilesystem;
useGaufretteAdapterLocal asLocalAdapter; //本地檔案:
$adapter= newLocalAdapter() '/var/media'LocalAdapter( | )'/var/media'
LocalAdapter();
//可選地使用一個FTP適配器
// $ftp = new FtpAdapter($path, $host, $username, $password, $port);
//初始化檔案系統
$filesystem = new Filesystem( $adapter
//使用它
$content = $filesystem ->read() 'Hello I am the new content' ;
$filesystem
->write( 'myFile'
,
$content
);
也有快取和記憶體適配器,並且隨後將會增加更多適配器。
19. Omnipay – 支付處理庫
Omnipay是一個PHP支付處理庫。它有一個清晰一致的API,並且支援數十個網關。使用這個函式庫,你只需要學習一個API和處理各種各樣的支付處理器。以下是一個例子:
1
2
3
4
5 111213 141516171819
. OmnipayGatewayFactory;
$gateway |
= GatewayFactory:: create(
'Stripe' );
$gateway ->setApiKey( 'abc123'
); number' = > '4111111111111111' ,
'expiryMonth'
=> 6,
'expiryYear' => 2016];
$response
= $gateway 'card' => $formData ]);
if ( $response ->isSuccessful()) {
print_r( $response );
} elseif () //跳到異地支付網關
$response->redirect();
}
exit ( $response
->getMessage());
}
進行切換。 20. Upload – 處理檔案上傳 Upload是一個簡化檔案上傳和驗證的函式庫。上傳表單時,這個函式庫會校驗檔案類型和尺寸。
1 23 4 5 64 58 11
12 13 14 15 16 17
18 19 20 |
$ '/path/to/directory'
);
$file
= new
UploadFile(
'foo'
,
$storage
);
//驗證檔案上傳
$file
->addValidations(
文件類型是"image/ png"
new
UploadValidationMimetype(
'image/png'
),確保文件不超過5
'image/png'
),確保不使用文件。或"G")
|
new
UploadValidationSize( '5M' ) ) try {
//成功
$file ->upload(); $e ) {
/ /失敗!
$errors = $file->getErrors(); $file ->getErrors();
它將減少不少乏味的程式碼。
21. HTMLPurifier – HTML XSS 防護
HTMLPurifier是一個HTML過濾庫,透過強大的白名單和聚集分析,保護你程式碼遠離XSS攻擊。它還確保輸出標記符合標準。 (源碼在github上)
1
2
3
4
5
| 3
4
HTMLPurifier.auto.php' ;
$config= HTMLPurifier_Config::createDefault();
$purifier
$clean_html = $purifier ->purify( $dirty_html);
);
|
);
);
的話這個庫的時候了。 22. ColorJizz-PHP – 顏色操控庫ColorJizz是一個簡單的庫,借助它你可以轉換不同的顏色格式,並且做簡單的顏色運算
3
4
| 5
6
7
use MischiefCollectiveorJizzizzcom new Hex(0xFF0000);
$red_cmyk = $hex ->toCMYK();
echo $red_cmyk ; ::fromString( 'red' )->hue(-20)->greyscale();
// 555555
// 555555
|
它已經支援並且可以操控所有主流顏色格式了 23. PHP Geo Geo – 將座標之間高精度距離。例如:
1
2
3
45645 useLocationCoordinate;
use LocationDistanceVincenty; |
$coordinate1 = new
Coordinate(19.820664, -155.4680666); $coordinate2 = new Coordinate(20.709722, -156.253333); // Haleakala Summit
$calculator = at =
$calculator ->getDistance ( $coordinate1 ,
$coordinate2 );
// returns 128130.850 (meters; ≈128 kilometers)
|
它將在使用地理位置資料的app中出色工作。你可以試譯 HTML5 Location API,雅虎的API(或兩者都用,我們在weather web app tutorial中這樣做了),來取得座標。
24. ShellWrap – 優美的命令列包裝器
借助 ShellWrap 函式庫,你可以在PHP程式碼裡使用強大的 Linux/Unix 命令列工具。
1
2
3
4
5
6
4
58 11121314 151617181920212222233 7
require
'ShellWrap.php '
;
use
| MrRioShellWrap
as
sh;
//檢出一個git分支
sh::git( 'checkout' ,
'master' );
//你也可以透過管道把一個指令的輸出用戶另一個指令
//下面透過curl過濾位置,然後透過grep'html'管道來過濾下載example.com網站
echo sh::grep( 'html' , sh::curl( 'http://example.com', sh::curl( 'http://example.com', sh::curl( 'http://example.com' , sh::curl('http://example.com' , sh::curl(
'http://example.com', ,
array (
'location' => true
sh::touch( 'file .html' );
//移除檔案
sh::rm( 'file.html');
//再次移除檔案(這次失敗了,然後因為檔案不存在而拋出異常)
try {
html' );
} catch(Exception $e ) { sh::rm() call';
}
當命令列發生異常時,這個庫拋出異常,所以你可以及時對之做出反應。它也可以透過管道讓你一個命令的輸出作為另一個命令的輸入,來實現更強的靈活性。
以上就介紹了PHP開發者應了解的24個函式庫,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。
|
|
|
|
|
|
|
|
|