Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php注释-最小工作示例_Php_Dependency Injection_Annotations_Metaprogramming - Fatal编程技术网

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

上次我检查(2008年)时,php中的注释并没有广泛传播。现在,在阅读了一些材料并做了一些“谷歌搜索”之后,我仍然有点困惑。有人能提供一个简单的示例来说明如何在php中使用注释吗:
让我们只说我希望这样的东西能起作用:

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空间缩进”辩论。有时人们会问错误的问题,因为他们认为这是实现他们所寻找的目标的最佳方式。把他们引向正确的方向几乎总是更好的。例如,“我怎样才能在这里使用全局变量?”或“我怎样才能使它成为一个单例?”都是同样有效的问题。但最好的答案是解释更好的替代方案,以及为什么它们比仅仅因为人们要求被教导而教他们坏习惯要好。空间没有实际的好处,注释(用于配置)有几个主要的缺点。我明白你的观点,是的,在某些情况下,最好只是为了指向正确的方向而发散。但我更多地将注释视为个人(或团队)的决定和喜悦,而不是“真正的坏主意”。以这种方式进行注释会造成足够多的问题,需要完全避免它们。它们增加了一个好处:让开发人员在一个文件中编辑两组数据,相比之下,这导致的缺点肯定是一个“非常糟糕的主意”。全局变量/单例/静态依赖也是“个人/团队”决策,但同样是非常糟糕的想法,我希望看到这些问题的答案,这些问题引导人们选择更好的替代方案,而不是简单地解释如何使用它们。