use關鍵字在PHP中的幾種用法
- 2020 年 4 月 11 日
- 筆記
use關鍵字在PHP中的幾種用法
在學習了和使用了這麼多年的PHP之後,您知道use這個關鍵字在PHP中都有哪些用法嗎?今天我們就來看一下它的三種常見用法。
1. 用於命名空間的別名引用
// 命名空間 include 'namespace/file1.php'; use FILE1objectA; use FILE1objectA as objectB; echo FILE1CONST_A, PHP_EOL; // 2 $oA = new objectA(); $oA->test(); // FILE1ObjectA $oB = new objectB(); $oB->test(); // FILE1ObjectA
這個想必在日常的工程化開發中會非常常見。畢竟現在的框架都是使用了命名空間的,不管做什麼都離不開各種類依賴的調用,在各種控制器文件的上方都會有大量的use xxxxxxxxx;語句。
2. 用於trait特性能力的引入
// trait trait A{ function testTrait(){ echo 'This is Trait A!', PHP_EOL; } } class B { use A; } $b = new B(); $b->testTrait();即使在最近這兩年,依然還是見過完全沒有用過trait的PHP程式設計師,不要驚訝,這是真實存在的。想想還有那麼多項目都還在用TP3也就不奇怪了。trait特性還是非常方便的一種類功能擴展模式,其實我們可以看作是將這個use放在了類中就成為了trait的引用定義了。
3. 匿名函數傳參
// 匿名函數傳參 $a = 1; $b = 2; // function test($fn) use ($a) // arse error: syntax error, unexpected 'use' (T_USE), expecting '{' function test($fn) { global $b; echo 'test:', $a, '---', $b, PHP_EOL; // test:---2 $fn(3); } test(function ($c) use ($a) { echo $a, '---', $b, '---', $c, PHP_EOL; }); // 1------3這個就有點意思了吧,方法中要調用外部的變數是需要global的,在這裡我們直接通過use()也是可以將變數傳遞過去的。而且這個僅限於在匿名函數中使用。
測試程式碼:https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/source/use%E5%85%B3%E9%94%AE%E5%AD%97%E5%9C%A8PHP%E4%B8%AD%E7%9A%84%E5%87%A0%E7%A7%8D%E7%94%A8%E6%B3%95.php
