Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.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_Phpdoc - Fatal编程技术网

Php 如何正确记录方法参数应该是实现某个接口的类名?

Php 如何正确记录方法参数应该是实现某个接口的类名?,php,phpdoc,Php,Phpdoc,我用的是PHPDoc。我有一个接受字符串参数的方法。该字符串应该是实现特定接口的类的名称,例如,IMyInterface 我应该做: /** * @param string $class_name */ public function myMethod($class_name) {} 或 我猜,因为类和接口不是PHP中的第一类,所以可能是后者。但是这两个选项似乎都有问题。我在不久前做的一个项目中使用了ApiGen,我发现最好使用类名,因为它在文档中创建了链接到这些特定类的页面。我没有使用P

我用的是PHPDoc。我有一个接受字符串参数的方法。该字符串应该是实现特定接口的类的名称,例如,
IMyInterface

我应该做:

/**
 * @param string $class_name
 */
public function myMethod($class_name) {}


我猜,因为类和接口不是PHP中的第一类,所以可能是后者。但是这两个选项似乎都有问题。

我在不久前做的一个项目中使用了ApiGen,我发现最好使用类名,因为它在文档中创建了链接到这些特定类的页面。我没有使用PHPDoc,但它可能具有类似的功能,使您的文档更易于访问

/**
* Constructor function.
*
* Creates a new user object with data provided.
*
* @return void
* @param mixed An array or object of user information to be read in.
* @param Permissions An instance of a Permissions object to associate with the user.
*/
public function __construct($data,$perms) {
    ...
}
在您的用例中,“string”是正确的,因为您正告诉读者要传递什么样的数据类型。如果用户实际尝试传递IMyInterface实现器的具体类实例,那么您的代码无疑会阻塞

如果您的方法只是为了接受表示可用接口列表的特定字符串列表而构建的,那么我建议在方法的长描述中直接说明这一点,而不是在一个参数的描述中。我还将利用@see标签提供指向此方法构建为接受的所有接口的文档的链接。这样,@param标记就可以真正地告诉读者“伙计,我必须有一个字符串”,你的方法描述解释了该方法将如何获取该字符串并将其关联到定义的接口,@see标记将帮助读者直接跳到任何/所有接口本身


关于IDE自动完成,一些IDE可以在方法代码中解释“/**@var IMyInterface$localMethodVar*/”,然后在$localMethodVar上提供自动完成,就好像它是IMyInterface的一个定义实例一样。

不要害羞,写一行完整的注释:$class\u name是一个实现了……哦,是的,绝对不反对。但是,仍然有一个“标准”,不幸的是,我不理解该标准的文档。我想知道类型字段的“正确”是什么。需要对象的@params呢?是否使用类名?是的,当参数需要某个类的特定对象实例时,数据类型就是该类名。
/**
* Constructor function.
*
* Creates a new user object with data provided.
*
* @return void
* @param mixed An array or object of user information to be read in.
* @param Permissions An instance of a Permissions object to associate with the user.
*/
public function __construct($data,$perms) {
    ...
}