您现在的位置是:首页 > PHP框架交流PHP框架交流
PHP8.0新特性(2) 注解的使用教程 终于不用三方库支持注解了
上善若水2024-03-04 17:58:37【PHP框架交流】 698人已围观
简介PHP8.0新特性之二注解,注解的使用教程终于不用三方库那种,官方加入了注解,注解用于依赖注入,权限认证,路由生成还是非常合适的,只可惜注解来的太晚,用的人太少了,大部分公司还是用的旧版本PHP.简单
PHP8.0新特性之二注解,注解的使用教程终于不用三方库那种,官方加入了注解,注解用于依赖注入,权限认证,路由生成还是非常合适的,只可惜注解来的太晚,用的人太少了,大部分公司还是用的旧版本PHP.
简单使用下PHP注解吧。
<?php
#熟悉PHP8.0的新特性
//1.注解。
//旧版本不支持注解的方式写法 不好获取注解中的信息,而是采用注释的方式去写注解,idea工具无法识别注解导致误删程序报错异常
#[Component(type: 'service')]
class PostsControllerNew
{
#[Route("/api/posts/{id}", methods: ["GET"])]
public function get($id)
{
return "get";
}
}
#[Attribute]
class Route
{
public $url;
public $methods;
function __construct($url, $methods = ["GET"])
{
$this->url = $url;
$this->methods = $methods;
}
}
#[Attribute]
class Component
{
public $type;
function __construct($type)
{
$this->type = $type;
}
}
//获取注解信息
function getClassAnnotations($class)
{
$annotations = [];
$reflection = new ReflectionClass($class);
$attributes = $reflection->getAttributes();
foreach ($attributes as $attribute) {
$annotations[$attribute->getName()] = $attribute->getArguments();
}
return $annotations;
}
function getMethodAnnotations($class, $method)
{
$annotations = [];
$reflection = new ReflectionClass($class);
$reflectionMethod = $reflection->getMethod($method);
$attributes = $reflectionMethod->getAttributes();
foreach ($attributes as $attribute) {
$annotations[$attribute->getName()] = $attribute->getArguments();
}
return $annotations;
}
print_r(getClassAnnotations(PostsControllerNew::class));
print_r(getMethodAnnotations(PostsControllerNew::class, 'get'));
定义了两个注解,分别需要同过反射来获取到信息!
Array
(
[Component] => Array
(
[type] => service
)
)
Array
(
[Route] => Array
(
[0] => /api/posts/{id}
[methods] => Array
(
[0] => GET
)
)
)
程序的输出结果。希望各大开源框架能迅速接入新版的注解吧!
记得再没有注解前,部分框架的注解是这样写的。
/**
* @ControllerAnnotation(title="测试控制器")
*/
class Test extends AdminController
{
/**
* @NodeAnotation(title="列表")
*/
public function index(){
echo __METHOD__;
}
}
开发的时候总是容易把注解的引用当做无效导入,导致程序报错!
use EasyAdmin\annotation\ControllerAnnotation;
use EasyAdmin\annotation\NodeAnotation;
新版注解PHPstorm提升还算友好,期待注解还后续项目中发光发热!
Tags: PHP8.0
很赞哦! (0)
随机图文
-
Jenkins window部署构建拉去php项目
Jenkins window自动完成自动部署拉去项目,点击构建后会自动拉去项目,构建我们的项目代码,两家公司都使用Jenkins管理代码,之前自己未搭建,都是搭建好现成的,自己搭建学习学习。1.Jen -
sql优化 GROUP BY多字段分组 分页查询速度慢
项目中遇到一个网页十分的卡慢,逐条排查,将sql放进去执行,执行时间居然高达19秒,怪不得慢,于是请教大佬,最后sql控制在1到两秒之间,现在想想,不同的写法,sql的执行效率真是天差地别呀!首先我们 -
有什么不懂的,尽管吻我就好了
1、有什么不懂的,尽管吻我就好了。 夸女孩的句子:(不要再说beauty了) pretty girl(漂亮女孩) lovely(美女、美人、佳人) looker(大美人) charming(迷人的) dream girl(梦中情人) attractive(妩媚动人) gorgeous lady(大美女) beller(最美的美女) peri(仙女) 2、说正事儿,你最近是在减肥吧,我有一个办法可以让你立马瘦两斤。什么办法?把你的心放我这里。 赠送一段酷酷的句子: 我还在努力,你千万不要喜欢上别人 -
幽默笑话
1、儿子拿着一张破纸,对我说:“爸爸,我有一张藏宝图,我送给你,你给我10块钱好吗?”我拿过来一看,说道:“你这不就是画的咱家吗,怎么就叫藏宝图了,还给我要10块钱。”儿子:“爸爸,你看看用红笔画的地方.”我仔细一看,沙发底下,桌子腿底下……我靠,这逼崽子,这可是老子藏私房钱的地方,我赶紧跟儿子说:“那啥,宝贝儿,我给你50块!”2、师父手拿秘籍,一边读秘籍上的内容一边比划:“