PHP: puis-je déclarer un résumé de la fonction avec un nombre variable d'arguments?
Je veux être en mesure de déclarer une fonction abstraite dans une classe parent, avec un nombre indéterminé d'arguments:
abstract function doStuff(...);
puis définir une mise en œuvre avec un ensemble de fait allusion arguments:
/**
* @param int $userID
* @param int $serviceproviderID
*/
static function doStuff($userID, $serviceproviderID) {}
La meilleure approche que j'ai eu jusqu'à présent est le présent,
abstract function doStuff();
/**
* @param int $userID
* @param int $serviceproviderID
*/
static function doStuff() {
$args = func_get_args();
...
}
Mais à chaque fois que la fonction est appelée, je reçois un tas de "manque d'argument" mises en garde en raison de la conseils. Est-il un meilleur moyen?
Edit: La question du mal, s'il vous plaît ne perdez pas votre temps à répondre. Ce qui suit est ce que je cherchais, et il semble fonctionner sans avertissements.
abstract class Parent {
abstract function doStuff();
}
/**
* @param type $arg1
* @param type $arg2
*/
class Child extends Parent {
function doStuff($arg1, $arg2) {
...
}
}
Avez-vous pensé à prendre vos arguments sous la forme de tableau?
Pourquoi définir une fonction comme résumé dans une interface? Puis de nouveau, une fonction d'interface doit avoir la même déclaration que sa mise en œuvre. C'est l'idée d'interfaces. Je ne sais pas quel est votre objectif, mais je pense que vous devez essayer de faire de votre code comme incertaine et inutilisable que possible.
Hein, désolé, j'ai peut-être vissé à cette question. Je suis pas obtenir toutes les mises en garde, donc je suppose que cette approche est OK. J'ai particulièrement envie de plusieurs, les arguments nommés, car il rend le code plus lisible.
Lorsque vous voulez vraiment vous fournir une méthode abstraite avec un nombre indéterminé d'arguments, vous n'avez probablement pas vraiment pensé. Vous définissent en général les résumés des méthodes, afin que chacun puisse s'étend la classe et tout le monde peut utiliser toute mise en œuvre sans connaître leurs détails concrets, mais avec un nombre indéterminé d'arguments les utilisateurs connaître les détails.
OMG, regardez php.net qu'est-ce que mot-clé
Pourquoi définir une fonction comme résumé dans une interface? Puis de nouveau, une fonction d'interface doit avoir la même déclaration que sa mise en œuvre. C'est l'idée d'interfaces. Je ne sais pas quel est votre objectif, mais je pense que vous devez essayer de faire de votre code comme incertaine et inutilisable que possible.
Hein, désolé, j'ai peut-être vissé à cette question. Je suis pas obtenir toutes les mises en garde, donc je suppose que cette approche est OK. J'ai particulièrement envie de plusieurs, les arguments nommés, car il rend le code plus lisible.
Lorsque vous voulez vraiment vous fournir une méthode abstraite avec un nombre indéterminé d'arguments, vous n'avez probablement pas vraiment pensé. Vous définissent en général les résumés des méthodes, afin que chacun puisse s'étend la classe et tout le monde peut utiliser toute mise en œuvre sans connaître leurs détails concrets, mais avec un nombre indéterminé d'arguments les utilisateurs connaître les détails.
OMG, regardez php.net qu'est-ce que mot-clé
abstract
pour.OriginalL'auteur | 2011-08-15
Vous devez vous connecter pour publier un commentaire.
Selon le commentaire
Si vous souhaitez passer un nombre arbitraire de valeurs, d'utiliser des tableaux de
Vous devriez éviter de "inconnu nombre d'arguments", parce que cela rend les choses encore plus difficiles, alors nécessaires: signatures de méthode dans les interfaces ainsi que des méthodes abstraites doit donner à l'utilisateur une indication, comment la méthode fonctionne avec n'importe quel de mise en œuvre. De sa une partie importante, que l'utilisateur n'a pas besoin de savoir quelque chose au sujet de la mise en œuvre de détails. Mais quand le nombre d'arguments de passe à chaque mise en œuvre, il doit savoir, comment les méthodes concrètes sont mises en œuvre.
Je ne sais pas, si je suis votre point, mais PHP le permet ^^ codepad.viper-7.com/UW1ghx
Je pense que le point est la seule façon que vous pouvez traiter avec un "inconnu" nombre d'arguments est en indiquant que vous attendez exactement un argument (de sorte que PHP sait qu'elle attend un argument)...il se trouve que l'un argument peut avoir n'importe quel nombre de propriétés et de valeurs. Pas techniquement vrai de dire à PHP permet un nombre indéterminé d'arguments.
OriginalL'auteur KingCrunch
En PHP 5.6 et plus tard, des listes d'arguments peuvent inclure la
...
jeton pour indiquer que la fonction accepte un nombre variable d'arguments.Vous pouvez l'appliquer à une classe abstraite comme suit:
Les arguments sera passé dans la variable donnée comme un tableau.
Combiné avec
list
, vous pouvez nommer les paramètres de la mise en œuvre de la fonction en une seule ligne:list($firstParam, $secondParam) = $params;
OriginalL'auteur Greg