日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP注解

發(fā)布時(shí)間:2024/9/30 php 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP注解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.定義

注解功能使得代碼中的聲明部分都可以添加結(jié)構(gòu)化、機(jī)器可讀的元數(shù)據(jù), 注解的目標(biāo)可以是類、方法、函數(shù)、參數(shù)、屬性、類常量。 通過 反射 API 可在運(yùn)行時(shí)獲取注解所定義的元數(shù)據(jù)。 因此注解可以成為直接嵌入代碼的配置式語言。

通過注解的使用,在應(yīng)用中實(shí)現(xiàn)功能、使用功能可以相互解耦。 某種程度上講,它可以和接口(interface)與其實(shí)現(xiàn)(implementation)相比較。 但接口與實(shí)現(xiàn)是代碼相關(guān)的,注解則與聲明額外信息和配置相關(guān)。 接口可以通過類來實(shí)現(xiàn),而注解也可以聲明到方法、函數(shù)、參數(shù)、屬性、類常量中。 因此它們比接口更靈活。

注解使用的一個(gè)簡單例子:將接口(interface)的可選方法改用注解實(shí)現(xiàn)。 我們假設(shè)接口 ActionHandler 代表了應(yīng)用的一個(gè)操作: 部分 action handler 的實(shí)現(xiàn)需要 setup,部分不需要。 我們可以使用注解,而不用要求所有類必須實(shí)現(xiàn) ActionHandler 接口并實(shí)現(xiàn) setUp() 方法。 因此帶來一個(gè)好處——可以多次使用注解。

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));}

以上是自己定義的一個(gè)注解 funcName, 用來標(biāo)識(shí)一個(gè)功能的名稱

//反射$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)限.

原文鏈接

  • 官方代碼
<?php interface ActionHandler {public function excute(); } #[Attribute] class SetUp{} class CopyFile implements ActionHandler {public $fileName;public $targetDirectory;#[SetUp]public function fileExists(){if (!file_exists($this->fileName)){throw new RuntimeException("File does not exist");}}#[SetUp]public function excute(){// TODO: Implement excute() method.copy($this->fileName,$this->targetDirectory."/".basename($this->fileName));} }function excuteAction(ActionHandler $actionHandler) {$reflection = new ReflectionObject($actionHandler); // var_dump($reflection);die(); // var_dump($reflection->getMethods());die();foreach ($reflection->getMethods() as $method){ // var_dump($method); // echo "<br>";$attributes = $method->getAttributes(SetUp::class);var_dump($attributes);echo "<br>"; //die();if (count($attributes)>0){$methodName = $method->getName();var_dump($methodName);echo "<br>";$actionHandler->$methodName();}} // die();$actionHandler->excute(); }$copyAction = new CopyFile(); $copyAction->fileName = "./favicon.ico"; $copyAction->targetDirectory="./static/"; excuteAction($copyAction); echo "hello".rand(1,10);

總結(jié)

以上是生活随笔為你收集整理的PHP注解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。