Pregunta

Me gustaría tener una referencia sobre los pros y los contras de usar include archivos vs objetos (clases) al desarrollar aplicaciones PHP.

Sé que me beneficiaría tener un lugar al que acudir para obtener esta respuesta... Tengo algunas opiniones propias, pero espero escuchar otras.

Un ejemplo sencillo:

Ciertas páginas de mi sitio solo son accesibles para usuarios registrados.Tengo dos opciones de implementación (hay otras pero limitémoslas a estas dos)

  1. Cree un archivo authenticate.php e inclúyalo en cada página.Contiene la lógica para la autenticación.

  2. Cree un objeto de usuario, que tenga una función de autenticación, haga referencia al objeto para la autenticación en cada página.

EditarMe gustaría ver de alguna manera sopesar los beneficios de uno sobre el otro.Mis razones actuales (y débiles) son las siguientes:

Incluye: a veces una función es simplemente más fácil/más corta/más rápida para llamar a los objetos: la agrupación de la funcionalidad y las propiedades conduce para un mantenimiento a largo plazo.

Incluye - Menos código para escribir (sin constructor, sin sintaxis de clase). Llámame vago, pero esto es cierto.

Objetos - Forzar la formalidad y un enfoque único en las funciones y la creación.

Incluye - Más fácil para un novato tratar con los objetos: más difícil para los novatos, pero mal visto por profesionales.

Observo estos factores al comienzo de un proyecto para decidir si quiero incluir inclusiones u objetos.Esos son algunos pros y contras que se me vienen a la cabeza.

¿Fue útil?

Solución

Estas no son realmente opciones opuestas.Tendrás que incluir el código de verificación de todos modos.Leí tu pregunta como programación procedimental vs.Programación orientada a objetos.

Escribir unas pocas líneas de código, o una función, e incluirlas en el encabezado de su página era cómo se hacían las cosas en PHP3 o PHP4.Es simple, funciona (así lo hicimos en osCommerce, por ejemplo, una aplicación PHP de comercio electrónico).

Pero no es fácil de mantener y modificar, como pueden confirmar muchos desarrolladores.

En PHP5 escribirías un objeto de usuario que contendrá sus propios datos y métodos de autenticación.Tu código será más claro y fácil de mantener ya que todo lo que tiene que ver con los usuarios y la autenticación estará concentrado en un solo lugar.

Otros consejos

Si bien la pregunta aborda un par de cuestiones muy discutibles (OOP, autenticación de usuario), pasaré por alto esos y segundo comentario de Konrad sobre __autoload.Cualquiera que conozca C/C++ sabe lo complicado que puede ser incluir archivos.Con la carga automática, una adición de PHP5, si elige usar programación orientada a objetos (lo cual hago casi exclusivamente), solo necesita usar alguna convención de nomenclatura de archivos estándar y (recomendaría) restringir una sola clase por archivo y PHP hará el resto por usted.Limpia el código y ya no tendrás que preocuparte por recordar eliminar las inclusiones que ya no son necesarias (uno de los muchos problemas con las inclusiones).

No tengo mucha experiencia en PHP, aunque lo uso en mi trabajo actual.En general, encuentro que los sistemas más grandes se benefician de la legibilidad y comprensibilidad que proporciona OO.Pero cosas como la coherencia (no mezcle OO y no OO) y sus preferencias personales (aunque solo en proyectos personales) también son importantes.

He aprendido a nunca usar include en PHP excepto dentro de las bibliotecas principales que uso y una central include de estas bibliotecas (+ config) en la aplicación.Todo lo demás está a cargo de un comité global. __autoload controlador que se puede configurar para reconocer las diferentes clases necesarias.Esto se puede hacer fácilmente utilizando convenciones de nomenclatura apropiadas para las clases.

Esto no sólo es flexible sino también bastante eficiente y mantiene limpia la arquitectura.

puedes ser un poco mas especifico?Para el ejemplo que usted da, debe utilizar include de ambas maneras.En el caso 1 solo incluye un archivo, en el caso 2 necesita incluir el archivo de clase (por ejemplo user.class.php) para permitir la creación de instancias de la clase Usuario.

Depende de cómo esté construido el resto de la aplicación, ¿es OO?Utilice OO.

Ya sea que lo hagas en clases o en un estilo más procedimental, simplemente debes verificar para asegurarte de que:

  1. Hay una sesión;
  2. Que la sesión sea válida;y,
  3. Que el usuario en posesión de la sesión tenga los privilegios adecuados.

Puede encapsular los tres pasos en una función (o podría funcionar un método estático en una clase de sesión).Prueba esto:

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.
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top