3

上次我检查(2008 年) php 中的注释并没有那么广泛。现在在阅读了一些材料并做了一些“谷歌搜索”之后,我仍然有点困惑。有人可以提供一个最小的工作示例来说明如何在 php 中使用注释:
让我们说我想要这样的东西工作:

class ClassName
{
  /**
  * @DefaultValue("test")
  */
  public $prop;
}

// so that i can do 

$kls = new ClassName();
$kls->prop // => test

好久没做php了

更新
这个问题的目的是了解symfonyflow3教义等库/框架如何实现它们的注释。

4

5 回答 5

4

PHP(尚)不支持注解。有一个提议的实现的 RFC,但它是否或何时会发生仍然未知。

您给出的特定示例可能会被 IDE 解释为自动完成的值,否则您可以这样做public $prop = 'Test';,但我想您已经知道了,这不是您的真正意图。

于 2012-12-10T15:11:19.347 回答
2

PHP 不应该支持注解,它们是目前 PHP 开发人员的祸害。它们会导致很多问题:

  1. 他们打破了版本控制。如果您想要在不同项目中使用两个不同配置的对象实例,即使更改的是配置而不是逻辑,它们也会成为不同的分支。

  2. 它们降低了便携性。如果您在两个使用注释的项目之间移动一个类,注释可能会破坏第二个项目

  3. 他们打破了封装。应用程序代码不应该关心它将如何在外部使用。注释告诉客户端代码它应该做什么,而不是让客户端代码决定。在您的 @DefaultValue 示例中,如果您在不注意注释的地方使用该类怎么办?如果尚未设置默认值,该类仍然可以工作吗?是的?不?也许?无论答案是什么,API 中都不清楚,也无法知道对象在构建后是否准备好履行其职责。

  4. 它们限制了灵活性。以 Symfony 的 @Inject 为例,不可能创建具有不同注入参数的类的两个实例。

请参阅:注释是可憎的PHP 注释是一个可怕的想法,以更详细地解释为什么应该避免它们。

于 2013-03-18T13:53:24.210 回答
2

PHP Manual -> Function Reference Variable and Type Related Extensions -> Reflection中,在几个反射类(ReflectionClass、ReflectionMethod、ReflectionFunction、ReflectionFunctionAbstract、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());
于 2014-02-18T03:32:59.477 回答
0

PHP doesn't support annotations (yet).

The only place I've used annotations in PHP that affect code flow is in phpUnit, which supports a number of annotation markers (eg @DataProvider and @ExpectedException) for handling various aspects of the test script.

That works fairly well, but isn't handled by PHP natively; phpUnit has to parse the script itself before including it and running the code normally. Fair enough for a unit test script, but not an ideal solution for a production system.

So I think the real answer is that you'll have to wait until PHP implements annotations natively. I believe there's a proposal for it, but it certainly isn't going to happen any time soon -- it's definitely not going to be in 5.5, which will be released next year. I don't think there are any fixed plans for the features in 5.6 or beyond, but if we're stretching out into at least 2014 for that, even assuming your hosting provider or server admins are willing to upgrade immediately.

于 2012-12-10T15:44:56.760 回答
0

是的,PHP 还不支持注解,但我们可以使用 Doctrine Annotations。看看 - https://www.doctrine-project.org/projects/annotations.html

于 2021-08-15T10:36:51.327 回答