Domanda

Mi piacerebbe avere un punto di riferimento per i pro e i contro dell'utilizzo di includere file vs oggetti(classi) durante lo sviluppo di applicazioni PHP.

So che trarrebbero beneficio da avere un posto dove andare per questa risposta...ho un paio di pareri di mio, ma aspetto con impazienza di sentire gli altri.

Un Semplice Esempio:

Alcune pagine del mio sito sono accessibili solo agli utenti registrati.Ho due opzioni per l'attuazione (ce ne sono altri, ma cerchiamo di limitare a questi due)

  1. Creare un authenticate.php file e inserire in ogni pagina.Contiene la logica per l'autenticazione.

  2. Creare un oggetto utente, che ha una funzione di autenticazione, fare riferimento all'oggetto per l'autenticazione su ogni pagina.

Modifica Mi piacerebbe vedere qualche modo pesare i vantaggi di uno rispetto all'altro.La mia attuale (e il debole motivi) a seguire:

Include - a Volte una funzione è solo più facile/più breve/più veloce per chiamare Oggetti - Raggruppamento di funzionalità e di proprietà che porta per la manutenzione a lungo termine.

Include - Meno codice da scrivere (nessun costruttore, nessuna classe di sintassi) mi chiamano pigro, ma questo è vero.

Oggetti - Forza di formalità e di un unico approccio per funzioni e la creazione di.

Include - Più facile per un novizio per affrontare con Oggetti - più Difficile per i novizi, ma visto di buon occhio da parte di professionisti.

Guardo questi fattori all'inizio di un progetto di decidere se voglio fare include o oggetti.Questi sono alcuni pro e contro di fuori della parte superiore della mia testa.

È stato utile?

Soluzione

Non si tratta di scelte opposte.È necessario inserire il codice di verifica comunque.Ho letto la tua domanda, come la programmazione procedurale vsProgrammazione OO.

Scrivere un paio di righe di codice, o di una funzione, e anche nella vostra pagina di intestazione era come le cose sono state fatte in PHP3 o PHP4.E ' semplice, funziona (come abbiamo fatto in osCommerce, per esempio, un e-commerce applicazione PHP).

Ma non è facile da mantenere e modificare, come molti sviluppatori in grado di confermare.

In PHP5, si scriverebbe un oggetto utente che effettuerà i propri dati e metodi per l'autenticazione.Il codice sarà più chiaro e più facile da mantenere, come tutto ciò che ha a che fare con gli utenti e di autenticazione sarà concentrate in un unico luogo.

Altri suggerimenti

Mentre la questione tocca un paio di molto discutibile problemi (OOP, l'autenticazione dell'Utente) salterò da chi e secondo Konrad commento su __autoload.Chi conosce il C/C++ sa tanto di dolore, tra cui i file possono essere.Con autoload, un PHP5 inoltre, se si sceglie di utilizzare OOP (cosa che faccio quasi esclusivamente) hai solo bisogno di utilizzare alcuni standard di convenzioni di denominazione dei file e (mi raccomando) la limitazione di una sola classe per file e PHP farà il resto per voi.Pulisce il codice e non è più necessario preoccuparsi di ricordare di rimuovere comprende che non sono più necessari (uno dei tanti problemi con la include).

Non ho molto di PHP, esperienza, anche se lo sto usando al mio attuale lavoro.In generale trovo che le più grandi sistemi di beneficiare la leggibilità e la comprensibilità che OO fornisce.Ma cose come consistenza (non mescolare OO e non-OO) e le vostre preferenze personali (anche se solo davvero su progetti personali) sono anche importanti.

Ho imparato a non utilizzare mai include in PHP, ad eccezione del nucleo di librerie che uso io e uno centrale include di queste librerie (+ config) nell'applicazione.Tutto il resto è gestito da un globale __autoload gestore che può essere configurato per riconoscere le diverse classi necessarie.Questo può essere fatto facilmente utilizzando apposite convenzioni di denominazione per le classi.

Questo non è solo flessibile, ma anche molto efficiente e mantiene l'architettura pulita.

Si può essere un po ' più specifico?Per l'esempio che date è necessario utilizzare includono in entrambi i modi.Nel caso 1 si comprende solo un file, nel caso 2, è necessario includere il file di classe (per esempio user.class.php) per consentire la creazione di un'istanza della classe Utente.

Dipende da come il resto dell'applicazione è costruito, è OO?Utilizzare OO.

Se lo si fa in classi o in una più procedurale stile, basta controllare che:

  1. C'è una sessione;
  2. Che la seduta è valida;e,
  3. Che l'utente in possesso della sessione ha i privilegi appropriati.

È possibile incapsulare tutte e tre le fasi in una funzione (o un metodo statico in una Sessione di classe potrebbe funzionare).Prova questo:

class Session
{
  const GUEST = 0;
  const SUBSCRIBER = 1;
  const ADMINISTRATOR = 2;

  public static function Type()
  {
    session_start();

    // Depending on how you use sessions on
    // your site, you might just check for the
    // existence of PHPSESSID. If you track
    // every visitor with sessions, however, you
    // might want to assign some separate unique
    // number (that you can track in a DB) to
    // authenticated sessions
    if(!$_SESSION['uniqid'])
    {
      return Session::GUEST;
    }
    else
    {
      // For the best security, don't store the
      // user's access permissions in the $_SESSION,
      // but rather check against the DB. This will
      // ensure that recently deleted or downgraded
      // administrators will not be able to make use
      // of a previous session.

      return THE_ACCESS_LEVEL_ACCORDING_TO_THE_DB
    }
  } 
}


// In your files that need to check for authentication (you
// could also do this in a controller if you're going MVC

if(!(Session::Type() == Session::ADMINISTRATOR))
{
  // Redirect them to wherever you want them to go instead,
  // like a log in page or something like that.
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top