PHP: pasar todos los argumentos con un stdClass?

  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Septiembre 6th, 2009, 2:14 pm

Im la tentación de tener todas las declaraciones de función de un aspecto similar al siguiente en el nuevo código.

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


Éstos son los beneficios que puede pensar en la parte superior de mi cabeza.

  • Los argumentos con nombre
  • Orden de los argumentos ya no importa
  • Varios argumentos pueden ser opcionales, eliminando la necesidad de pasar un valor de prueba como nula para los primeros argumentos opcionales cuando los posteriores se siguen utilizando
  • Las funciones pueden ser modificados por simple adición del nuevo código y tener que buscar su argumento en la stdClass, eliminando la necesidad de ordenar refactorizar argumento y la prioridad

Para simplificar los valores por defecto y asegúrese de que los argumentos necesarios están incluidos, tal vez sería mejor para crear clases de discusiones, y tienen funciones de espera.

PHP Código: [ 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. ?>


¿Es esto algo theres existente patrón de diseño para?
¿Existen inconvenientes en llamas Im que busca más?
Strong with this one, the sudo is.
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Septiembre 6th, 2009, 2:14 pm

  • Bogey
  • Bogey
  • Genius
  • Avatar de Usuario
  • Registrado: Jul 14, 2005
  • Mensajes: 8211
  • Loc: USA
  • Status: Offline

Nota Septiembre 6th, 2009, 9:41 pm

No puedo ayudarte si es una buena idea o no, pero puedo decir que es interesante...
"Bring forth therefore fruits meet for repentance:" Matthew 3:8
  • spork
  • Brewmaster
  • Silver Member
  • Avatar de Usuario
  • Registrado: Sep 22, 2003
  • Mensajes: 6130
  • Loc: Seattle, WA
  • Status: Offline

Nota Septiembre 8th, 2009, 4:52 pm

Marcos tales como matrices de uso CakePHP para pasar la mayoría de los parámetros. El mismo concepto, pero no requiere el uso de una clase para contenerlos.
The Beer Monocle. Classy.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Septiembre 9th, 2009, 5:27 am

Ventaja #1 de las clases de discusión sobre los arrays asociativos, constructores de clase y los valores por defecto.
Strong with this one, the sudo is.
  • Nightslyr
  • Proficient
  • Proficient
  • No Avatar
  • Registrado: Sep 21, 2005
  • Mensajes: 274
  • Status: Offline

Nota Septiembre 28th, 2009, 3:20 pm

Para ser honesto, yo no veo ningún beneficio real para él. Es una envoltura alrededor de una lista de argumentos. Ese tipo de cosas tiene su lugar (por ejemplo, tal vez su beneficiosa para poner una envoltura alrededor de $ _REQUEST para facilitar la validación y la protección de sus valores de sobreescritura accidental), pero no creo que su adecuada para todos los casos.

Ciertamente, no parece flexible. Mi código tiende a tener funciones o métodos que requieren una gran variedad de listas de argumentos diferentes. Ciertamente wouldnt desea crear un (sub) clase para cada uno.

Un ejemplo más realista que un lindo / Jackson 5 entregas en conserva pueden ayudar a fomentar el debate.
  • joebert
  • Sledgehammer
  • Genius
  • No Avatar
  • Registrado: Feb 10, 2004
  • Mensajes: 13455
  • Loc: Florida
  • Status: Offline

Nota Septiembre 28th, 2009, 4:19 pm

Ive todos, pero abandonó la idea.

Yo lo uso en algunos lugares de elección cuando necesito los valores por defecto o tener un montón de argumentos, pero en lo que todo los argumentos de los objetos que su dificultad para poco más de su valor.
Strong with this one, the sudo is.

Publicar Información

  • Total de mensajes en este tema: 6 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 82 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2011 Unmelted, LLC. Ozzu® es una marca registrada de Unmelted, LLC