我想学习PHP注释

时间:2013-10-04 05:04:15

标签: php mysql annotations

什么是PHP Anotations?我在哪里可以了解更多信息?我需要简单的例子来理解它。我用Google搜索了很多。不知何故,我达到了这一点:

示例代码:

<?php

class AddressShipment{


/* Attributes of AddressShipment */


     /** 
     * private TypePlaceShipment type
     * @ORM\Id @ORM\Column @ORM\GeneratedValue
     * @dummy
     * @var long
     */
       private $type;

     /** 
     * private boolean lift
     * @ORM\Column(type="boolean")
     * @Assert\NotEmpty
     * @var boolean
     */
       private $lift;

     /** 
     * private String comment
     * @ORM\Column(type="string")
     * @Assert\NotEmpty
     * @var string
     */
       private $comment;
?>

有人可以解释一下吗?什么是PHP Anotations?我们怎么用呢?使用它的目的是什么?

3 个答案:

答案 0 :(得分:2)

它基本上用于文档生成。

支持php的IDE也会查找注释,并为您提供有关函数功能,返回内容以及所需参数的信息。

因此,如果您创建一个php库,另一个人可以轻松阅读注释以了解它的作用,而无需深入研究代码,他的IDE将识别这些注释

以下是从某个地方的某个功能使用此注释的netbeans的示例 enter image description here

您可以访问此链接了解: http://manual.phpdoc.org/HTMLSmartyConverter/PHP/phpDocumentor/tutorial_elements.pkg.html

答案 1 :(得分:2)

除了提供文档(例如http://www.phpdoc.org/)并为IDE提供提示之外,一些库还使用注释来确定如何处理类。一个例子是 Doctrine ,它提供了一个对象关系映射器,它可以根据注释将对象映射到数据库(使用它的数据库抽象层)。

在给定的代码片段中,我将@ORM\Id@ORM\Column@ORM\GeneratedValue识别为some of the annotations that Doctrine uses。但是,AddressShipment未声明为具有相应注释的实体,因此它们未正确用于此目的。

Zend Framework 2 利用 Doctrine 的注释库来启用the creation of forms from annotations(包括验证和过滤)。

引擎 Doctrine 使用reflection来阅读这些注释。如果将依赖于注释的库与某些PHP加速器结合使用,则需要注意配置加速器,以便在缓存代码时不丢弃注释。

答案 2 :(得分:1)

(在阅读之前请注意,事实上我知道你在谈论如何使用一些php ORM框架文档标签以及在哪里找到它们的含义。)

注释只是PHP世界中的注释,它们被称为“PHPDoc标签”,但不幸的是它们只用于一些PHP IDE代码自动完成/智能感知/文档生成。

PHPDoc本身就是一个标准,多年前从无处开始但是开源php文档项目,并且得到了php社区的肯定,现在甚至php反射类都支持它们。

例如phpdoc标签@return指定什么是php类方法返回类型或php函数返回类型。

@var指定什么是属性类型。 PHPDoc有自己的声明规则。例如,文档必须以/ **开头,必须以* /开头。您可以在http://en.wikipedia.org/wiki/PHPDoc#Tags链接上找到此标准。

在下面的示例中,带有@符号的所有标记都是合法的,有时可能会被某些PHP IDE(如Netbeans或Eclipse或甚至Sublime)处理。但是:

class planet
{
    /**
    * primary
    * length 16
    * @var string
    */
    public $name;
    /**
    * type smallint
    * @var integer
    */
    public $order;
    /**
    * @var boolean
    */
    public $water;
    /**
    * @var \galaxy\star
    */
    public $star;
    /**
    * enum
    * @var \galaxy\moon
    */
    public $moons = array ();

但你的问题很有趣的是你也提到了@ORM。这意味着你正在使用一些ORM框架,可能是Doctrine和Symphony,你需要找到这些注释对特定框架意味着什么。这可以在特定框架的文档中轻松找到。它们太多了,没有任何线索可以在这里张贴它们。

例如,如果您打算使用 Doctrine ,可以访问http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html

或者如果您使用的是单个文件框架 db.php ,它也是数据库第一个样式并且也使用注释,您可以访问http://dbphp.net