PHP: passage de tous les arguments de l'aide d'un stdClass?

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13458
  • Loc: Florida
  • Status: Offline

Message Septembre 6th, 2009, 2:14 pm

Im tentés d'avoir toutes les déclarations de fonctions ressembler à quelque chose comme ce qui suit dans votre nouveau code.

PHP Code: [ Select ]
function works_with(stdClass $args)
{
   echo $args->value1;
}
  1. function works_with(stdClass $args)
  2. {
  3.    echo $args->value1;
  4. }


Voici les avantages que je peux penser à du haut de ma tête.

  • Arguments nommés
  • L'argument de l'ordre ne compte plus
  • Les arguments multiples peuvent être optionnels, en supprimant la nécessité d'adopter une valeur fictive comme nulles pour les arguments antérieurs facultatif lorsque plus tardives sont encore utilisés
  • Les fonctions peuvent être modifiées en ajoutant simplement le nouveau code et l'avoir chercher son argument dans le stdClass, éliminant le besoin de commander argument Refactor et de préséance

Pour simplifier les valeurs par défaut et assurez-vous que les arguments nécessaires sont inclus, il pourrait être préférable de créer des classes arguments et ont des fonctions les attendent.

PHP Code: [ Select ]
<?php
 
class fun_args
{
   public $a, $b, $c;
   public function __construct()
   {
      $this->a = 'a';
      $this->b = 'b';
      $this->c = 'c';
      return $this;
   }
}
 
function fun(fun_args $args)
{
   echo "It's as easy as $args->a, $args->b, $args->c. ";
}
 
$lyric = new fun_args();
fun($lyric);
 
$lyric->a = 1;
$lyric->b = 2;
$lyric->c = 3;
fun($lyric);
 
// It's as easy as a, b, c. It's as easy as 1, 2, 3.
 
?>
  1. <?php
  2.  
  3. class fun_args
  4. {
  5.    public $a, $b, $c;
  6.    public function __construct()
  7.    {
  8.       $this->a = 'a';
  9.       $this->b = 'b';
  10.       $this->c = 'c';
  11.       return $this;
  12.    }
  13. }
  14.  
  15. function fun(fun_args $args)
  16. {
  17.    echo "It's as easy as $args->a, $args->b, $args->c. ";
  18. }
  19.  
  20. $lyric = new fun_args();
  21. fun($lyric);
  22.  
  23. $lyric->a = 1;
  24. $lyric->b = 2;
  25. $lyric->c = 3;
  26. fun($lyric);
  27.  
  28. // It's as easy as a, b, c. It's as easy as 1, 2, 3.
  29.  
  30. ?>


Est-ce quelque chose Theres un existant Design Pattern pour?
Yat-il des inconvénients Blazing Im regardant par-dessus?
Strong with this one, the sudo is.
  • Anonymous
  • Bot
  • No Avatar
  • Inscription: 25 Feb 2008
  • Messages: ?
  • Loc: Ozzuland
  • Status: Online

Message Septembre 6th, 2009, 2:14 pm

  • Bogey
  • Bogey
  • Genius
  • Avatar de l’utilisateur
  • Inscription: Juil 14, 2005
  • Messages: 8212
  • Loc: USA
  • Status: Offline

Message Septembre 6th, 2009, 9:41 pm

Je ne peux pas vous aider si c'est une bonne idée ou non, mais je peux dire qu'il est intéressant...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de l’utilisateur
  • Inscription: Sep 22, 2003
  • Messages: 6134
  • Loc: Seattle, WA
  • Status: Offline

Message Septembre 8th, 2009, 4:52 pm

Des cadres tels que CakePHP utiliser des tableaux pour passer la plupart des paramètres. Même concept, mais ne nécessite pas l'utilisation d'une classe pour les contenir.
The Beer Monocle. Classy.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13458
  • Loc: Florida
  • Status: Offline

Message Septembre 9th, 2009, 5:27 am

Avantage #1 de l'argument de classes sur les tableaux associatifs, les constructeurs de classe et les valeurs par défaut.
Strong with this one, the sudo is.
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Inscription: Sep 21, 2005
  • Messages: 274
  • Status: Offline

Message Septembre 28th, 2009, 3:20 pm

Pour être honnête, je ne vois aucun avantage réel pour elle. Son un wrapper autour d'une liste d'arguments. Ce genre de chose a sa place (par exemple, peut-être son intérêt à mettre une enveloppe autour de $ _REQUEST pour faciliter la validation et de protéger ses valeurs à partir d'écrasement accidentel), mais je ne crois pas que ses approprié pour tous les cas.

Il ne semble certainement pas souple. Mon code a tendance à avoir des fonctions / méthodes qui exigent une variété de listes d'arguments différents. Je n'ai certainement wouldnt souhaitez créer une (sous-) classe pour chacun d'eux.

Un exemple plus réaliste qu'une cute / conserves Jackson 5 mai restitution Help Discussion accueil.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Inscription: Fév 10, 2004
  • Messages: 13458
  • Loc: Florida
  • Status: Offline

Message Septembre 28th, 2009, 4:19 pm

Ive a pratiquement abandonné l'idée.

Je l'utilise dans certains endroits de choix quand j'ai besoin de quelques valeurs par défaut ou qui ont un tas d'arguments, mais pour autant que tous arguments étant des objets de sa peine un peu plus de sa valeur.
Strong with this one, the sudo is.

Afficher de l'information

  • Total des messages de ce sujet: 6 messages
  • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 205 invités
  • Vous ne pouvez pas poster de nouveaux sujets
  • Vous ne pouvez pas répondre aux sujets
  • Vous ne pouvez pas éditer vos messages
  • Vous ne pouvez pas supprimer vos messages
  • Vous ne pouvez pas joindre des fichiers
 
 

© 2011 Unmelted, LLC. Ozzu® est une marque déposée de Unmelted, LLC