Pergunta

Eu gostaria de ter uma referência para os prós e contras da utilização de inclusão arquivos vs objetos(classes) quando o desenvolvimento de aplicações em PHP.

Eu sei que eu iria beneficiar de ter um lugar para ir para esta resposta...eu tenho algumas opiniões do meu próprio, mas estou ansioso para ouvir os outros.

Um Exemplo Simples:

Certas páginas do meu site são acessíveis apenas para usuários registrados.Eu tenho duas opções para a implementação (existem outros, mas vamos nos limitar a estes dois)

  1. Criar um authenticate.php arquivo e incluir em cada página.Ele contém a lógica para autenticação.

  2. Criar um objeto de usuário, que tem um autenticar função, fazer referência ao objeto para autenticação em cada página.

Editar Eu gostaria de ver alguma maneira de avaliar os benefícios de um sobre o outro.O meu atual (e fraco razões) a seguir:

Inclui - às Vezes, uma função é apenas mais simples e mais curto/mais rápido para chamar Objetos - Agrupamento de funcionalidade e propriedades leva para a manutenção de longo prazo.

Inclui - Menos código para escrever (nenhum construtor, não há aula de sintaxe) me chamar de preguiçoso, mas isso é verdade.

Objetos - Força de formalidade e de uma única abordagem para funções e criação.

Inclui - Mais fácil para um novato para lidar com Objetos - mais Difícil para iniciantes, mas desaprovado por profissionais.

Eu olho para esses fatores, no início de um projeto para decidir se quero fazer o que inclui ou objetos.Esses são alguns prós e contras em cima da minha cabeça.

Foi útil?

Solução

Estas não são realmente opostas escolhas.Você terá que incluir o código de verificação de qualquer maneira.Eu li a sua pergunta programação procedural vs.Programação OO.

Escrever algumas linhas de código, ou de uma função, e incluindo-o em sua página de cabeçalho foi como as coisas eram feitas em PHP3 ou PHP4.É simples, ele funciona (como fizemos em osCommerce, por exemplo, um comércio eletrônico aplicativo PHP).

Mas não é fácil de manter e modificar, como muitos desenvolvedores podem confirmar.

Em PHP5 que você ia escrever um objecto de utilizador que vai levar os seus próprios dados e métodos para autenticação.Seu código será mais clara e mais fácil de manter como tudo que tem a ver com os usuários e autenticação serão concentrados em um único lugar.

Outras dicas

Enquanto a questão incide sobre um casal muito discutível problemas (OOP, autenticação de Usuário) eu vou pular por esses e segundo Konrad comentário sobre __autoload.Quem sabe C/C++ sabe o quanto de dor, incluindo arquivos podem ser.Com autoload, um PHP5 disso, se você escolher usar OOP (o que eu faço quase exclusivamente), você só precisa usar algum padrão convenção de nomeação de arquivo e (eu recomendo) restringir a uma única classe por arquivo e o PHP fará o resto para você.Limpa o código, e você não terá de se preocupar em lembrar-se de remover inclui que não são mais necessários (um dos muitos problemas com o inclui).

Eu não tenho muito o PHP experiência, apesar de que eu estou usando no meu emprego atual.No geral, acho que os maiores sistemas de beneficiar a legibilidade e compreensibilidade que OO oferece.Mas em coisas como a consistência (não misturar o OO e não-OO) e as suas preferências pessoais (embora apenas em projetos pessoais) também são importantes.

Eu aprendi a nunca usar include em PHP, exceto dentro do núcleo de bibliotecas que eu uso e uma central include estas bibliotecas (+ config) no aplicativo.Tudo o resto é tratado por um global __autoload manipulador que pode ser configurado para reconhecer as diferentes classes necessárias.Isso pode ser feito facilmente usando apropriado convenções de nomenclatura para as classes.

Este não é apenas flexível, mas também bastante eficiente e mantém a arquitetura limpa.

Você pode ser um pouco mais específico?Para o exemplo que você dá você precisa para incluir em ambos os sentidos.No caso 1 de incluir apenas um arquivo, no caso 2 você precisa incluir o arquivo de classe (por exemplo, user.class.php) para permitir a instanciação da classe de Usuário.

Depende de como o resto do aplicativo é construído, é isso OO?Usar OO.

Se você fazê-lo em classes ou em um mais processuais de estilo, você simplesmente precisa verificar para garantir que:

  1. Há uma sessão;
  2. Que a sessão é válida;e,
  3. Que o usuário de posse da sessão tem privilégios apropriados.

Você pode encapsular todos os três passos para uma função (ou método estático de uma classe de Sessão pode funcionar).Tente isso:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top