Comment le document de la magie (_call et _callStatic) les méthodes de IDEs
Après de nombreuses années de bonheur, de codage dans notepad++ et sublime, j'ai été conseillé de donner un IDE PHP un aller. Je suis d'essayer phpStorm et il semble beau. La complétion de code et de la documentation est une grande fonctionnalité, mais n'est pas pour moi lorsque la magie méthodes sont utilisées. Est-il un travail autour pour obtenir phpStorm pour comprendre ce qui se passe dans les méthodes magiques?
Notre situation est quelque chose comme ceci:
abstract class a {
public static function __callStatic($method,$args)
{
if(strpos($method,"get_by_") === 0)
{
//do stuff
} elseif(strpos($method,"get_first_by_") === 0) {
//do stuff
} elseif($method == "get_all") {
//do stuff
}
}
}
class b extends a {
//some more stuff
}
b::get_by_user_id(27);
b::get_first_by_id(156);
b::get_all();
La magie callStatic méthode nous permet d'obtenir une collection d'objets à l'aide de 1 ou plusieurs arguments qui composent l'appel de la fonction.
Je vois qu'il y a un @la déclaration de méthode pour l'utiliser dans ces cas, mais phpStorm est seulement la cueillette jusqu'à la première de ces déclarations. En outre, je ne peut définir le type de retour à mixtes où que je préfère être en mesure de la définir comme quelle que soit la classe, c'était appelé sur b dans mon exemple).
Des idées ou des suggestions serait très très bien reçus, merci.
- POURQUOI TOUT LE MONDE PENSE QUE PRIMORDIAL
_call
EST UNE BONNE IDÉE?!! - Obtenu de dire, +1 de Brian commentaire dans le cas où aucune personne saine d'esprit va la trouver cette question. Les méthodes magiques sont à toutes fins utiles: undocumentable (essayez de le document a(n) [paramètre|condition|postcondtion|exception] pour une méthode magique), pas IDE de compagnie (essayez de l'étape de débogage d'une méthode magique), résistant à la refactorisation (s'il vous plaît, ne même pas envisager d'essayer de refactoriser une méthode magique dans un poste permanent morceau de logiciel), et PARESSEUX (ok, la dernière peut être interprétée comme un avis).
- -1 pour l'opinion dans le commentaire de @LukeA.Leber qu'elle témoigne d'un manque de vision. Alors que les méthodes magiques ne sont pas une manière d'écrire moins de code (si vous les utilisez pour être paresseux), les méthodes magiques de faire architectures possibles que simple ne serait pas possible autrement ou qui serait ainsi outrageusement complexe, il ne serait pas utile d'écriture. Et ils sont complètement IDE sympathiques lors de l'utilisation de PHPDoc. Notez que la plupart du temps, vous n'avez pas besoin de méthodes magiques, mais quand vous en avez besoin, il n'y a pas de substitut (en PHP.) Lorsqu'ils sont utilisés dans un très structurée de la manière de les utiliser est un formulaire de solution valable.
- Ne pense pas primordial
__call
est une mauvaise idée. Il est tout au sujet de la mise en œuvre. La mise en œuvre de la question ci-dessus aurait certainement pas être le meilleur moyen, mais pour la chaîne de mesure de l'API, il permet beaucoup de flexibilité.
Vous devez vous connecter pour publier un commentaire.
Utilisation au niveau de la classe PHPDoc commentaire -- spécifiquement @méthode tag -- fonctionne très bien dans PhpStorm:
Ci-dessus:
@method
-- PHPDoc tagstatic
-- raconte que c'est la méthode statiquesomeClass
ou$this
-- type de retourget_by_user_id
-- nom de la méthode(int $id)
-- signature de la méthode:([[type] [parameter]<, ...>])
Bla-bla
-- une description facultativePlus sur
@method
:P. S.
Alors que
@method static
fonctionne très bien dans PhpStorm (dit IDE que la méthode est statique), il peut ne pas être (encore?) pris en charge par les phpDocumentor outil (désolé, ne l'avez pas utilisé pendant un certain temps).Sinon: (dans PhpStorm, bien sûr)
Settings | Inspections | PHP | Undefined | Undefined method --> Downgrade severity if __magic methods are present in class
-- il ne va pas aider avec la complétion de code de ces méthodes, mais ne marque pas ces méthodes magiques comme "undefined method" erreurs.phpDocumentor billet concernant l'utilisation de RegEx/noms partiels pour
@property
/@method
balises (comment il peut être utile pour la documentation et le peu d'aide qu'elle peut apporter à l'effectif de l'IDE lorsque vous traitez avec la complétion de code):@methods
à travers 140 classe différente. N'est-il pas un plus générique, de façon à fournir de la documentation?get_by_*(int $id)
). Pour les IDE (code de l'inspection, pas la fin!) vous avez alt solution (désactiver les avertissements). Pour phpDocumentor (ou autre outil) - pas de solution connue à moi (c'est peut-être là, mais je ne sais pas à ce sujet). Vous avez le lien vers github - file nouveau billet et demander l'ajout de ces "noms partiels" correspondant à des fonctionnalités de voir ce qu'ils vont dire (le plus probable sera rejetée). Si il sera mis en œuvre, puis l'IDE peut avoir en tant que bien plus tard.Est en quelque sorte liée à la question d'origine:
Vous pouvez également définir ce dans phpstorm méta-fichier. Voici un exemple de méthode de fabrique (v2016.3):
De cette façon, vous n'avez pas à docblock toutes les possibilités où la magie se produit.
Ont certains docs pour plus de détails.