2012-04-27 30 views
8

Estoy escribiendo una aplicación que permite a los usuarios modificar y cambiar algunas de las configuraciones de su sitio. Solo estoy construyendo un generador de formularios que enviará varias opciones a varios plugins para generar el código; lo que me pregunto es si debería usar objetos para esto en lugar de matrices multidimensionales. Si es así, ¿cómo cambiaría mi código?Objeto PHP o una matriz

Así que ahora me han hecho esto: su muy larga y va a ser más largas parte tan sólo he pegado de la misma en aras de la brevedad: -

$scopeSettings = array(
    'site_background' => array(
     'subpanels' => array(
      'colour' => array(
       'plugins' => array(
        'colourchooser' => array(
         'tip' => "The background colour appears underneath the 'Background Image' (if set)-hover over the '?' around the colour chooser for extra tips on how to use it", 
         'element' => 'body', 
         'gradientenabled' => 'true', 
         'opts' => array (
          'closed' => 'true', 
          'advanced' => array(
           'tip' => "You can paste in your own generated gradient codes in here", 
           'checkbox' => true 
          )//end advanced 
         )//end Opts 
        )//end colour chooser 
       )//end plugins 
      ),//end colour sub panel 
      'pattern' => array(
       'plugins' => array(
        'patternselector' => array(
         'tip' => "Use the pattern selector to apply effects like moire or scan lines to your background image", 
         'element' => 'patimg' 
        )//end patternselector 
       )//end plugins 
      ),//end pattern sub panel 
     )//end subpanels 
    )//end site background 
);//end scope settings 

¿Cuál sería la mejor práctica con este tipo de la cosa?

Respuesta

0

Yo diría que algunos como Array Oriented Programmation y que, con PHP 5.4 pueden expresarse de una manera excelente. Sin embargo, más personas están acostumbradas a OOP -lo hago yo- y puede ser una forma más legible de codificar su solución.

4

Quizás esto sea una estupidez, pero puede usar "YAML" o "JSON" como formato de configuración para una aplicación no?

Como por ejemplo Symfony u otro marco.

+0

Sí, en realidad suena bien, me gusta JSON ...;) Y también puedo conectarlo entre php y js, lo cual es posible que deba hacer ... Creo que intentaré eso ... –

1

Mi consejo: pruebe YAML o XML o JSON para obtener un archivo de configuración más legible, luego analícelo de nuevo en una matriz en su propio código.

0

Creo que en esta ruta iría con una ruta orientada a objetos estructurados. Puede tener un objeto principal que contenga todos los objetos secundarios (grupos de configuración) e incluso puede recuperarlo en un grupo de configuración como un objeto propio. Cada objeto tendrá sus propias definiciones y propiedades que se pueden documentar en el código que proporciona información útil dentro de un IDE (si usa docblocks).

1

Guardaría la configuración en <insert your markup language of choice> (XML, JSON, YAML, etc.).

A continuación, puede almacenar en caché estos en una variable $_SESSION, y poblarlo cuando el bootstrap si no lo hacen ya existen:

session_start(); 

if (!isset($_SESSION['settings'])) { 
    // Assuming you choose JSON... 
    $settings = json_decode(file_get_contents('settings.json'), TRUE); 
    $_SESSION['settings'] = $settings; // array 
    $_SESSION['settings'] = (object)$settings; // object 
} 

Independientemente de si se usa la matriz o el objeto se convierte entonces en una cuestión de qué sintaxis de acceso prefieres:

$_SESSION['settings']['site_background']['subpanels']['colour']... 
// vs. 
$_SESSION['settings']->site_background->subpanels->colour... 
0

Yo usaría objetos. Suponiendo que usted está haciendo un formulario, debe tener varias clases:

  • Form - para mantener la forma, tendrá una propiedad $input_list (o $node_list para contener todas las entradas
  • Input - para describir una sola entrada elemento, se debe tener propiedades como label, type, etc. tip
  • Fieldset - para describir un conjunto de campos, para contener elementos adicionales interior como clase Form, tendría un $input_list para contener todas las entradas insid. e de eso.

Estas clases pueden ser independientes, y se puede ampliar a haber personalizado tipos de entrada comunes (por ejemplo)

class Checkbox extends Input { 
    public $type = 'checkbox' 
    .... 
} 
0

Como de otras personas aquí también mi opinión es usar YAML o JSON - usando esto podría hacerse de una manera muy simple.

Así, por ejemplo, un ejemplo de formato JSON de su estructura de datos:

var settings = { 
    'site_background' : { 
     'subpanels' : { 
      'colour' : { 
       'plugins' : { 
        'colourchooser' : { 
         'tip' : "The background colour appears underneath the 'Background Image' (if set)-hover over the '?' around the colour chooser for extra tips on how to use it", 
         'element' : 'body', 
         'gradientenabled' : 'true', 
         'opts' : { 
          'closed' : 'true', 
          'advanced' : { 
           'tip' : "You can paste in your own generated gradient codes in here", 
           'checkbox' : true 
          }//end advanced 
         }//end Opts 
        }//end colour chooser 
       }//end plugins 
      },//end colour sub panel 
      'pattern' : { 
       'plugins' : { 
        'patternselector' : { 
         'tip' : "Use the pattern selector to apply effects like moire or scan lines to your background image", 
         'element' : 'patimg' 
        }//end patternselector 
       }//end plugins 
      }//end pattern sub panel 
     }//end subpanels 
    }//end site background 
};//end scope 

puede utilizar las funciones de PHP como json_encode y json_decode para JSON < -> PHP transformación de datos. El uso de llaves significa que los elementos son objetos, mientras que cuando se reemplazó por [y] usted obtuvo matrices ...

Pero también un enfoque de PHP OOP se podría utilizar con éxito especialmente cuando se utiliza extensibilidad. Podría tener una configuración de clase principal con algunas propiedades predeterminadas y p. funciones mágicas __get y __set y luego puede implementar muchas subclases de subconjuntos que se extienden desde esta clase principal de Configuraciones.

Cuestiones relacionadas