php注释-最小工作示例
上次我检查(2008年)时,php中的注释并没有广泛传播。现在,在阅读了一些材料并做了一些“谷歌搜索”之后,我仍然有点困惑。有人能提供一个简单的示例来说明如何在php中使用注释吗:php注释-最小工作示例,php,dependency-injection,annotations,metaprogramming,Php,Dependency Injection,Annotations,Metaprogramming,上次我检查(2008年)时,php中的注释并没有广泛传播。现在,在阅读了一些材料并做了一些“谷歌搜索”之后,我仍然有点困惑。有人能提供一个简单的示例来说明如何在php中使用注释吗: 让我们只说我希望这样的东西能起作用: class ClassName { /** * @DefaultValue("test") */ public $prop; } // so that i can do $kls = new ClassName(); $kls->prop // =&g
让我们只说我希望这样的东西能起作用:
class ClassName
{
/**
* @DefaultValue("test")
*/
public $prop;
}
// so that i can do
$kls = new ClassName();
$kls->prop // => test
我很久没有做过php了
更新这个问题的目的是了解库/框架是如何喜欢和实现它们的注释的。PHP还不支持注释。有一种可能,但它仍然是未知的,如果或什么时候会发生
您给出的特定示例可能会被IDE解释为自动完成的值,否则您只需执行
public$prop='Test'代码>,但我想你已经知道了,这不是你真正的意图。PHP还不支持注释
我在PHP中使用的唯一影响代码流的注释是phpUnit,它支持许多注释标记(例如@DataProvider
和@ExpectedException
),用于处理测试脚本的各个方面
它工作得相当好,但不是由PHP本机处理的;phpUnit必须在包含脚本并正常运行代码之前解析脚本本身。对于单元测试脚本来说,这已经足够了,但对于生产系统来说,这并不是一个理想的解决方案
因此,我认为真正的答案是,您必须等待PHP以本机方式实现注释。我相信有一个提议,但它肯定不会很快实现——它肯定不会出现在明年发布的5.5中。我不认为5.6或更高版本中的功能有任何固定的计划,但如果我们至少要在2014年实现这一点,即使假设您的主机提供商或服务器管理员愿意立即升级。PHP不应该支持注释,它们目前是PHP开发人员的一大祸害。它们造成了许多问题:
他们破坏了版本控制。如果您希望在不同的项目中有一个对象的两个不同配置的实例,那么它们将成为不同的分支,即使更改的是配置而不是逻辑
它们降低了可移植性。如果在使用注释的两个项目之间移动类,注释可能会打断第二个项目
它们破坏了封装。应用程序代码不应该关心如何在外部使用它。注释告诉客户机代码它应该做什么,而不是让客户机代码决定。在@DefaultValue示例中,如果在不注意注释的地方使用该类,该怎么办?如果没有设置默认值,该类是否仍然有效?对不大概不管答案是什么,API中都不清楚,也无法知道对象一旦构建完成是否准备好履行其职责
它们限制了灵活性。以Symfony的@Inject为例,不可能创建具有不同注入参数的两个类实例
请参阅:有关为什么应该避免它们的更详细解释。中,在多个反射类(ReflectionClass、ReflectionMethod、ReflectionFunction、ReflectionFunctionBStract、ReflectionProperty…)中存在一个方法getDocComment(),您可以从中获取文档注释块。然后按照你想要的方式处理你的评论。例如:
class Foo {
private $a;
private $b;
...
/**
* @annotation('baz')
*/
public function bar() {
...
}
}
$reflMethod = new ReflectionMethod('Foo', 'bar');
//prints
//string(26) "/**
// * @annotation('baz')
// */"
var_dump($reflMethod->getDocComment());
你指的是phpDocs吗?不,我不知道-我想知道当你使用symfony@routes
注释时会发生什么。条令2中也使用了注释:。我想你没有抓住问题的重点。询问“演示如何在php中使用注释的最小工作示例”,而不是关于在php中使用注释的个人意见。讨论在PHP中使用注释是否合适感觉像是老的“4空间vs 2空间缩进”辩论。有时人们会问错误的问题,因为他们认为这是实现他们所寻找的目标的最佳方式。把他们引向正确的方向几乎总是更好的。例如,“我怎样才能在这里使用全局变量?”或“我怎样才能使它成为一个单例?”都是同样有效的问题。但最好的答案是解释更好的替代方案,以及为什么它们比仅仅因为人们要求被教导而教他们坏习惯要好。空间没有实际的好处,注释(用于配置)有几个主要的缺点。我明白你的观点,是的,在某些情况下,最好只是为了指向正确的方向而发散。但我更多地将注释视为个人(或团队)的决定和喜悦,而不是“真正的坏主意”。以这种方式进行注释会造成足够多的问题,需要完全避免它们。它们增加了一个好处:让开发人员在一个文件中编辑两组数据,相比之下,这导致的缺点肯定是一个“非常糟糕的主意”。全局变量/单例/静态依赖也是“个人/团队”决策,但同样是非常糟糕的想法,我希望看到这些问题的答案,这些问题引导人们选择更好的替代方案,而不是简单地解释如何使用它们。