PHP8的alpha版本将在未来几天内发布。当然,我认为最重要的是JIT。我自2013年以来一直致力于此工作。经过多次的挫折和失败,我终于得到了。已发表的。
但今天我们不谈JIT。PHP8发布后,我会单独写一个类似于《理解PHP8中的JIT》的系列。
呵呵,今天我想谈谈属性。昨天看到很多群转发一篇文章,叫《理解PHP8的特性》。老实说,这篇文章应该直接翻译成英文。很多学生读完后表示很困惑,不知道在说什么。
所以我想最好用一篇文章来简单解释一下这是什么。
在讲注解之前,我们先来说说之前的注解。我们在PHP项目中经常看到类似下面的参数
/参见参数Foo$argument/函数dummy$Foo
这些称为评论。在旧版PHP中,注释中的param和see没有任何意义。整个段落在函数/方法中保存为名为doc_comment的字符串。
为了解析这个注解的含义,我们需要设计一个特定的语法,比如Lili的+name,和param类似,然后直接解析这个字符串,提取出那个信息。
例如,要从See注释中获取信息,您必须执行类似的操作
$ref=新ReflectionFunction34;$doc=$ref-gt;getDocComment;$see=substr$doc,strpos$doc,34;
处理这些字符串相对麻烦且容易出错。
对于属性来说,它实际上将“Annotation”升级为“Annotation”,支持键入内容。
例如,上面的例子看起来像这样
lt;lt;Params34;34;gt;gt;lt;lt;参见34;gt;gt;
从PHP8Alpha2开始,您还可以使用
LT;LT;参数34;34;gt;gt;功能参考
不用担心这样写的影响。您现在可以通过反射获取这种格式的注释。例如,现在我们想要得到SeeAnnotation:
$ref=新ReflectionFunction34;var_dump$ref-gt;getAttributes34;[0]-gt;getName;var_dump$ref-gt;getAttributes34;[0]-gt;getArguments;
输出
字符串334;
当然,还有一些更高级的用途。也就是说,我们可以定义所谓的“注释类”:
lt;phplt;lt;phpAttributegt;类MyAttribute
然后,注意newInstance调用,您可以编写
lt;lt;MyAttribute34;34;gt;gt;函数dummy$argument$ref=newReflectionFunction34;[0]-gt;newInstance;
当您运行此代码时,将调用MyAttribute的__construct方法,并且传递给调用的参数是“See”和“
你明白了吗?您可以“实例化”注释,然后基于此功能创建您自己的“注释即组合”设计。
总而言之,以下是编写属性的方法
lt;lt;名称gt;gt;lt;lt;名称参数1、参数2、参数Ngt;gt;lt;lt;名称1参数、名称3参数gt;gt;
然后就可以使用PHP的Reflection系列方法根据getAttributes34来获取那些注解;还可以通过调用返回注解的getName方法来获取名称,并且可以使用getArguments方法获取括号内的Arguments。
更进一步,如果Name是直接用phpAttriubtes注解定义的类,也可以通过调用newInstance方法来实现类似34的调用。
很多人这样这有什么好处呢?
说实话,我一直对新功能不感兴趣,但这个属性应该还是有的。
然而,一些PHPers可能会说使用Go不是一个好主意。如果你想成为一名优秀的开发者,你需要专注于解决题并利用现有的技术资源来实现业务,而不是利用公司的资源来实现技术成就!如果您无法使用一种语言的本机功能编写良好的代码来解决您的题,那么切换到另一种语言也无济于事。技术人才培养始终呈“T”字形。如果我学不了PHP就是为了吃饭,那我改学Java、GO语言能成为高手吗?
PHP的终极学习不仅限于使用PHP,还必然包括性能优化、算法、Swoole、微服务、分布式并发、Linux、Kafka、MQ等等。先掌握一个题目,就是全面、全面。从表面上打好基础。为了帮助大家成功成为一名架构师,我们专门准备了一套高质量的PHP架构师教程,帮助你月薪突破30K。
领取方式点赞关注小编并私信【资讯】即可领取如何领取资讯!
显示部分信息
领取方式点赞关注小编并私信【资讯】即可领取如何领取资讯!
关于php伪协议文件包含和php 文件包含 注释的详细内容已解完毕,记得持续关注本站。
No Comment