PHP8的注解
PHP8.0增加了注解的支持, 雖然 PHP的注解沒用過, 但是咱用過JAVA的注解呀.
注解這玩意怎么用? 簡單說就下面幾步:
到了PHP中, 也基本上換湯不換藥.
使用
定義注解類
#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_FUNCTION)] class MyAttribute{private $value;public function __construct($value){$this->value = $value;} }這就定義完了, 其中Attrbute用來標(biāo)識當(dāng)前注解可以用在什么地方.
使用注解
#[MyAttribute('test')] function test(){}提取注解
同樣, 也是通過反射來提取注解.
// 獲取方法的反射對象 $ref = new ReflectionFunction("test"); // 獲取方法上指定名稱的全部注解(可以定義多個, 所以返回值是個數(shù)組) $attributes = $ref->getAttributes(MyAttribute::class); // 將獲取的第一個值實例化. 此時會調(diào)用注解的構(gòu)造方法 $myAttribute = $attributes[0]->newInstance();簡單使用就這樣了. 問了, 注解有什么用? 想想JAVA中怎么用的, 基本差不多吧. 比如框架的自動注入, 定義一個路徑, 在加載的時候掃描路徑下的所有文件, 提取出對應(yīng)的注解.
注釋
在8.0之前, 通過注釋其實也能夠?qū)崿F(xiàn)同樣的功能. 但是相比注解, 注釋有幾點不足:
而注解就是升級后的語言層面注釋, 較之前方便了許多
庫注解
記錄一些系統(tǒng)已經(jīng)定義好的注解, 但是發(fā)現(xiàn)沒有找到文檔. 么事, 全局搜索使用了Attribute的地方就好啦.
Immutable
命名空間: JetBrains\PhpStorm
將一個類的屬性標(biāo)記為不可修改的. (寫在類上則標(biāo)識類的所有屬性). 但是這個注解只是加給phpStorm看的, 運行時并不會報錯.
ArrayShape
告訴 IDE 返回的數(shù)組中都有什么類型, 方便 IDE 提示(IDE 使用)
Deprecated
棄用標(biāo)識(IDE 使用). 和原本的啟用注釋類似. 不過可以提示新的函數(shù).
ExpectedValues
標(biāo)識期望得到的值(IDE 使用). 指定可能的值列表, 二進(jìn)制位, 類常量等等.
例如Attribute類構(gòu)造方法的使用:
Language
(IDE 使用) 說是能提示參數(shù)是某個語言的字符串(如 SQL), 研究半天沒懂動有什么用.
NoReturn
(IDE 使用) 標(biāo)記調(diào)用函數(shù)時, 會結(jié)束執(zhí)行, 就像調(diào)用exit函數(shù)一樣.
其參數(shù)可以指定, 僅當(dāng)接收指定常量參數(shù)時才退出.
Pure
標(biāo)記函數(shù)調(diào)用過程對結(jié)果沒有影響, 簡單說就是, 如果函數(shù)的返回值沒有使用, 那就可以安全的刪除這個函數(shù)調(diào)用.
最后, 發(fā)現(xiàn)已經(jīng)定義的注解, 都是給編譯器使用的.
簡單上手之后, 發(fā)現(xiàn)和JAVA基本一致, 后面如果封裝一些組件的話, 應(yīng)該能用得上.
總結(jié)
- 上一篇: c语言程序设计实践课选题,c语言程序设计
- 下一篇: PHP脚本调用命令获取实时输出