- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通常,在 PHP 中使用 DocBlock 是最佳实践之一。它对于以前版本的 PHP(低于 PHP 7.3,尤其是 7.4)非常有用。它通知开发人员有关类属性类型、期望的参数类型和方法返回的值(在 PHP 中缺乏严格类型的情况下)。
假设在 PHP 5.6 中,代码可能如下所示:
namespace App\Service\Catalog\Category;
use App\Entity\Catalog\Category\Category;
use App\Repository\Catalog\Category\CategoryRepository;
class CategoryService
{
/** @var CategoryRepository */
private $categoryRepository;
/** @var int */
private $currentNestingLevel = 1;
/**
* CategoryService constructor.
* @param CategoryRepository $categoryRepository
*/
public function __construct(Category $categoryRepository)
{
$this->categoryRepository = $categoryRepository;
}
/**
* @param $parentCategoryId
* @return array
*/
public function getCategoriesDataByParentCategoryId($parentCategoryId)
{
$categories = $this->categoryRepository->getByParentCategoryId($parentCategoryId);
$categoriesData = [];
foreach ($categories as $category) {
$categoriesData[] = $this->getCategoryData($category);
}
return $categoriesData;
}
}
但是在这种情况下,当我们使用 PHP 7.4 时,这些 DocBlocks 不提供任何附加信息:
namespace App\Service\Catalog\Category;
use App\Repository\Catalog\Category\CategoryRepository;
class CategoryService
{
private CategoryRepository $categoryRepository;
private int $currentNestingLevel = 1;
public function __construct(CategoryRepository $categoryRepository)
{
$this->categoryRepository = $categoryRepository;
}
public function getCategoriesDataByParentCategoryId(int $parentCategoryId): array
{
$categories = $this->categoryRepository->getByParentCategoryId($parentCategoryId);
$categoriesData = [];
foreach ($categories as $category) {
$categoriesData[] = $this->getCategoryData($category);
}
return $categoriesData;
}
}
Robert C. Martin 在 Clean code 中写道,对所有方法/变量等使用 JavaDoc(原文如此!)是不好的做法,会降低代码的可读性。此外,他说,注释 (DocBlock) 可能不会反射(reflect)指定元素的当前状态(例如,在 DocBlock 中我们有 int,但变量已更改为字符串)
我查了一下,PSR标准主要只是说了,如何使用DocBlock以及它们应该是什么样子,而没有说什么时候应该使用。
你怎么看这件事?我们应该始终对代码中的所有元素使用 DocBlock 还是仅在特定情况下使用 DocBlock?您在这两种情况下看到了什么样的利弊?
最佳答案
Bob 大叔在他的书中说的很对——使用注释来提供您无法在代码中明确表达的信息。如果注释只是重复函数名称和参数 - 则无需使用它。正如书中提到的那样,当代码发生变化而使下一位开发人员陷入困境时,注释往往会保持不变。
因此,在注释中表达任何无法用函数名称和变量表达的特定于域的规则和策略。
此外,由于 Clean 代码书主要围绕 Java 语法支持编写 - 在 PHP 中,我们无法在代码中明确声明此方法会在某处抛出异常。这意味着我们可以通知 IDE 和开发人员预期异常的唯一方法是使用 @throws 标记。
此外,Java 支持注解,而 PHP 不支持。这是注释的另一种可能用途。一些框架决定利用它——比如 Symfony 及其路由注释。 Doctrine ORM with Entity annotations 等等。它们在库中被读取和编译,以提供类似于内置注释的支持。
所以使用 Bob 叔叔在他的书中推荐的评论,由于 PHP 的性质,添加以下内容:
另外一种可能的用法是特定于 IDE 或特定于工具的注释,例如:
正如@El_Vanja 所指出的:
@return SomeClass[]
或 @param string[]
关于php - 如何在 PHP 7.4 中使用 DocBlocks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61034781/
PHP 文档 block 中以下内容的含义是什么: #@+ zend框架代码中的一个例子: /**#@+ * @const string Version constant numbers */ c
这个问题在这里已经有了答案: 关闭 9 年前。 Possible Duplicate: Is there a way for phpDoc to document an array of objec
我在一些旧代码中添加了一些注释,并且在使用 PHPDocumentor 时遇到了一个小问题。 这是一个例子: /** * Constructs the Widget object * * Bas
我正在将 PHP 对象发送到模板文件,并且希望在我的模板文件的顶部记录对象的哪些属性(使用 __get)可用以及它们是什么,并使它们可用于代码提示。 这是一个例子。 在我的 Controller 中:
在 Doctrine 项目的 docblock 注释中,是否有一种标准方法来记录 Collection 中预期的实体类?像这样的东西: /** * @var Collection */ prote
假设我有一个函数(显然是一个微不足道的例子): public function dot(){ return implode('.', func_get_args()); } 现在我知道我可以将
我所说的正确的 DocBlock 注释是这样的注释: 符合PHPDoc standard 提供PHPStorm IDE自动完成 这是类本身: class Factory_DomainObjects {
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
我有一组类,每个类都在自己的文件中。我已经添加了适当的 DocBlock,这样我在构建文档时就不会收到任何错误或警告。这是一个非常简单的例子: 当我在此类上运行 phpdoc 时,页面级 DocBl
有时在我的代码中我喜欢注释掉一段代码以供临时使用/引用等,例如: /* blah */ 但有个小烦恼是,如果我想在该 block 中插入一行,当我单击 enter 时,它会自动在下一行放置一个 *,就
在 PhpStorm 中使用自动 php 文档 block 生成时,我最终在静态方法上使用了 @static 注释: /** * Reset the singleton instance, for
我正在使用 Aptana Studio 3 进行 PHP 开发。我知道有一个用于为类和方法生成 PHPDoc block 的代码段(键入 doc,按 ctrl+space 并插入适当的代码段)。问题是
我正在使用 PHPDoc,并意识到您可以使用 markdown 向 DocBlock 添加一些格式。特别是,我注意到您可以使用反引号来突出显示内联代码。 但是,我似乎不知道如何将代码块添加到 DocB
创建方法后,我使用 /**生成 DocBlock。它会自动填充 @param和 @return对于那个功能。示例: /** * * @param type $str * @return type
通常,在 PHP 中使用 DocBlock 是最佳实践之一。它对于以前版本的 PHP(低于 PHP 7.3,尤其是 7.4)非常有用。它通知开发人员有关类属性类型、期望的参数类型和方法返回的值(在 P
通常,在 PHP 中使用 DocBlock 是最佳实践之一。它对于以前版本的 PHP(低于 PHP 7.3,尤其是 7.4)非常有用。它通知开发人员有关类属性类型、期望的参数类型和方法返回的值(在 P
我错误地在我的文件中添加了 DocBlock 注释: /** * @author My Name * @copyright Copyright (C) 2012 - 2015 My
我试图用VSCode扩展Intelephense更好地完成,有些事情没有意义。下面是一些示例代码:。在滚动浏览所有全局符号和方法之后,我在$Client->getCatalogApi()上得到了完成。
我是一名优秀的程序员,十分优秀!