PHP注解
1.定義
注解功能使得代碼中的聲明部分都可以添加結(jié)構(gòu)化、機(jī)器可讀的元數(shù)據(jù), 注解的目標(biāo)可以是類、方法、函數(shù)、參數(shù)、屬性、類常量。 通過 反射 API 可在運(yùn)行時獲取注解所定義的元數(shù)據(jù)。 因此注解可以成為直接嵌入代碼的配置式語言。
通過注解的使用,在應(yīng)用中實(shí)現(xiàn)功能、使用功能可以相互解耦。 某種程度上講,它可以和接口(interface)與其實(shí)現(xiàn)(implementation)相比較。 但接口與實(shí)現(xiàn)是代碼相關(guān)的,注解則與聲明額外信息和配置相關(guān)。 接口可以通過類來實(shí)現(xiàn),而注解也可以聲明到方法、函數(shù)、參數(shù)、屬性、類常量中。 因此它們比接口更靈活。
注解使用的一個簡單例子:將接口(interface)的可選方法改用注解實(shí)現(xiàn)。 我們假設(shè)接口 ActionHandler 代表了應(yīng)用的一個操作: 部分 action handler 的實(shí)現(xiàn)需要 setup,部分不需要。 我們可以使用注解,而不用要求所有類必須實(shí)現(xiàn) ActionHandler 接口并實(shí)現(xiàn) setUp() 方法。 因此帶來一個好處——可以多次使用注解。
2.兩種方式
1.PHP8新增了attribute注解類
2.以前的版本Doctrine Annotations
composer require doctrine/annotations
中文使用文檔
3.原理
1.注解的使用
/*** 列表及搜索* @funcName 院所管理-院所列表*/public function index(){//如果是搜索,轉(zhuǎn)換成GET方式,以便以后后退if ($_POST) {$this->redirect($this->url(SFrame::getController(), SFrame::getAction(), $_POST));}以上是自己定義的一個注解 funcName, 用來標(biāo)識一個功能的名稱
//反射$m = new ReflectionMethod($this, $name);//方法注釋 $note = mid(trim($m . ''), '/**', '*/');//取指定標(biāo)簽 funcName 的值 $matched = preg_match('/@funcName\s*([^\s]*)/i', $note, $matches); 以上只是示例, 通過反射得到代碼的注釋,正則取到指定注解的值, 然后自己來 根據(jù) 注解的值進(jìn)行相應(yīng)的邏輯處理.我的框架 使用了注解的值 來 控制權(quán)限.原文鏈接
- 官方代碼
總結(jié)
- 上一篇: Vue使用axios提交表单数据
- 下一篇: php的declare命令