关于PHP 中 /* @var $test classname*/ 注解的问题

马迪奥1 发布于 2015/01/07 23:55
阅读 5K+
收藏 0
PHP

开源之夏第三届火热来袭,高校学生参与赢万元奖金!>>>

在Yii2中看到一行这样的注解:


/* @var $rule AccessRule */
        foreach ($this->rules as $rule) {
            if ($allow = $rule->allows($action, $user, $request)) {

这里有行

/* @var $rule AccessRule */
这时候并不知道$rule 这个变量是什么类型,但是通过上面这个注解,我可以直接通过$rule 调用 AccessRule 中的 allows()方法,这个让我喜出望外,在PHP中却有这样的方式,挺好用;但是如果我把rule 设置为类的公有属性,通过$this->rule->allows 调用,这种方式却失效了,请问这个应该如何使用呢?有没有朋友用过?




加载中
0
南湖船老大
南湖船老大

PHP原生不支持注解,这里模仿的是Java/.Net里的注解。

实现思路比较简单,就是读取源文件,用ReflectionClass::getDocComment 解析出注释来。zend framework也有这种用法。zend framework里的更强大,支持一些运算和简单表达式。曾经PHP 5.6计划原生支持注解,但后来这个特性被否决了。

0
欣儿
欣儿
怎么可能,记得这是某个框架照JAVA的方式来的
0
马迪奥1
马迪奥1

引用来自“欣儿”的评论

怎么可能,记得这是某个框架照JAVA的方式来的
有没有用过这种方式?
0
toozyxia
toozyxia
百度 phpdocument,按这个注释可以有代码提示。
0
马迪奥1
马迪奥1

引用来自“南湖船老大”的评论

PHP原生不支持注解,这里模仿的是Java/.Net里的注解。

实现思路比较简单,就是读取源文件,用token函数解析出注释来。zend framework也有这种用法。zend framework里的更强大,支持一些运算和简单表达式。曾经PHP 5.6计划原生支持注解,但后来这个特性被否决了。

学习了,这个感觉用起来不错
0
马迪奥1
马迪奥1

引用来自“xia-yongsheng”的评论

百度 phpdocument,按这个注释可以有代码提示。
感谢
0
_
_Yud
$this->rules[N]->allows()
0
kuafoo
kuafoo

这个不是注解,只是普通注释 

@www.veryim.net

0
leo108
leo108

引用来自“南湖船老大”的评论

PHP原生不支持注解,这里模仿的是Java/.Net里的注解。

实现思路比较简单,就是读取源文件,用token函数解析出注释来。zend framework也有这种用法。zend framework里的更强大,支持一些运算和简单表达式。曾经PHP 5.6计划原生支持注解,但后来这个特性被否决了。

应该不是用token,目测是反射类实现的

南湖船老大
南湖船老大
确认了下,是ReflectionClass::getDocComment 。已修改答案
南湖船老大
南湖船老大
嗯 有可能。具体实现代码我忘记了
0
yefe
yefe
该评论暂时无法显示,详情咨询 QQ 群:点此入群
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部
返回顶部
顶部