2015-12-22 2 views
1

I Document habituellement mes définitions de fonctions PHP avec un docblock style phpDocumentor:Comment documenter une fonction anonyme à l'aide de phpDocumentor?

/** 
* This is a summary of this function. 
* 
* @since 1.0.0 
* 
* @return int 
*/ 
function my_return_something() { 
    return 20; 
} 

Ma question est, comment dois-je documenter une fonction anonyme? Par exemple:

$length = function() { 
    return 20; 
}; 
+5

Vous devez documenter pas une fonction, mais une variable à la place. Il sera 'callable' (ou, si vous avez besoin d'une référence spécifique que c'est une fonction anonyme - le' \ Closure') –

+0

Je ne pensais pas que les variables devaient être documentées avec un docblock? – henrywright

+0

Si utilisé dans le même contexte - normalement, vous n'avez pas à le faire. PHPStorm, par exemple, sera parfaitement capable d'obtenir que votre $ longueur est une fermeture même sans elle. Pour les documentations de variables, voir [le manuel] (http://phpdoc.org/docs/latest/references/phpdoc/tags/var.html). Normalement, ce n'est pas nécessaire. –

Répondre

2

Vous ne devez pas documenter la fonction anonyme, vous devez plutôt documenter une variable. Il ressemblera à ceci:

/** @var \Closure $length */ 
$length = function() { 
    return 20; 
}; 

comme étiquette @var est applicable pour les variables régulières aussi bien. Cela, cependant, n'est normalement pas nécessaire: PHPDoc est destiné à être utilisé par IDE et la plupart des IDE-s seront en mesure d'obtenir que votre variable est une fermeture juste parce que vous avez votre affectation.

Si vous voulez passer cette variable quelque part - la vous allusion à la méthode/fonction accepter comme callable ou \Closure explicitement, même sans PHPDoc (mais vous pouvez également utiliser PHPDoc ainsi)

Pour détails sur @var tag, voir le documentation. Notez également que le type de fermeture ou le rappel n'aura rien à voir avec le type de valeur renvoyé par ce rappel - il est évident que vous déclarez votre callback, sans l'appeler (cela étant dit: je suppose que "length" n'est pas un bon nom pour un rappel car il provoque une confusion.Utilisez un certain nom d'action à la place, comme "lengthGetter" ou plus)