有没有被广泛接受的phpDoc语法来记录哪个钩子调用函数?

时间:2018-02-15 作者:Curtis

我将所有钩子保存在一个文件中,函数按其各自的类(不同的自动加载文件)进行组织。

正在寻找一种标准方法来记录函数的唯一目的是在“init”上调用,例如。

当前正在使用@see \'init\'

谢谢

示例代码

hooks.php

add_action( \'init\', \'remove_image_sizes\' );

functions.php

/**
  * Removes image sizes added by mistake prior to 1.6.18
  *
  * @since 1.6.18
  * @see \'init\'
  * @return void
  */
function remove_image_sizes() {
  remove_image_size( \'foo\' );
  remove_image_size( \'bar\' );
}

3 个回复
SO网友:XedinUnknown

调用钩子如果您想记录在某处调用的钩子的用法,即钩子处理程序必须知道的事情,那么hook documentation standard.

如果您的函数或方法通过调用或处理钩子来使用钩子,那么只需使用PHPDoc的标准语法即可。这是因为WordPress挂钩不是Structural Element 香草PHPDoc会寻找的。让我们看看@see 标记语法:

@see [URI | FQSEN] [<description>]
这可以通过以下方式进行解释:

这个@see 标记后面必须跟有URI或FQSEN,也可以跟有描述。这个URIFQSEN 组件确定链接指向的位置,而description 组件确定链接的文本。

因此,记录函数中使用的WP挂钩的好方法如下:

/**
 * Summary.
 *
 * @see https://developer.wordpress.org/reference/hooks/plugins_loaded/ plugins_loaded
 */
function myFunc() {}

SO网友:Mark Kaplun

函数doc块应该记录它的功能、可能的用途,但不记录谁使用它。记录它是在考虑挂钩X的情况下设计的是有意义的,但事实就是这样。

考虑单元测试。在这种情况下,您可能会在不进行整个核心初始化的情况下自行调用函数,这意味着将函数与init挂钩联系在一起的描述至少会产生误导。

您尝试使用的样式还将迫使您在更改无关代码的同时更改文档,例如如果您决定将调用移动到wp_loaded 而不是init

SO网友:Simon Kane

我不同意前面的答案。似乎被调查者并没有为WordPress开发:“我认为,这是一个很好的例子。”;考虑单元测试。在这种情况下,您可能会单独调用函数;显然,这对于绝大多数WP代码是不可行的。

然而;移动通话“;虽然这种说法并不常见,因为几乎所有的钩子都是为了执行一个非常特定的行为而设计的,但它是一个值得关注的问题。更典型的是,现有过滤器最终将被多个钩子ID使用,因为有些ID是动态生成的,但是静态引用的。它在两侧都是动态的情况超出了任何类型的文档解析器的能力。

我认为正确的解决方案是将add\\u action和add\\u filter调用解析为某种引用,比如@hook\\u for(我刚刚开始了解phpdoc的内容,请耐心等待)。这可能在docblock中,”“;特别意见“;,甚至只是doxygen或类似产品中的某种助手(但也需要手动访问以覆盖边缘情况)。

我想要的是,doxygen或phpdoc将这些@hook\\u for reference收集到调用方/被调用方列表中,就像它们对普通函数引用所做的那样,但显然是在输出的一个单独部分中。知道插件或主题使用哪种挂钩,并且能够一键点击代码将是一件令人惊奇的事情。

现在我发明了一个新的@"E;tag,希望有人会出现并说;已存在的-使用此;。我已经看了@see和@link,但不是很深入——也许他们就是答案?但是,为了获得最佳结果,我们仍然需要由预处理器(我建议的add\\u过滤器/add\\u操作解析器)中的某些内容自动生成它们。

结束

相关推荐

Implement Hooks Using Array

我试图在一个主题中实现一些钩子,但不是用重复的代码写出每个钩子,而是想知道是否可以使用和数组来声明钩子。E、 g.通常,我会使用类似以下内容:function hook_name_1() { do_action( \'hook_name_1\' ); } function hook_name_2() { do_action( \'hook_name_2\' ); } 有没有办法将钩子名称放入一个数组中,然后用一个foreach循环