Qual projeto PHP de código aberto tem o design OOP 'perfeito' com o qual posso aprender? [fechadas]

9

Sou novato no OOP e aprendo melhor por exemplo.

Você poderia dizer que esta pergunta é semelhante a Quais projetos de código aberto Scala devo estudar para aprender as melhores práticas de codificação - mas em PHP.

Ouvi dizer que o Symfony tem a melhor 'arquitetura' (não vou fingir que sei o que isso significa exatamente), assim como o Doctrine ORM. Vale a pena gastar muitos meses lendo o código fonte desses projetos, tentando deduzir os padrões usados ​​e aprendendo novos truques?

Eu já vi um número igual de páginas dissing e gostando da base de código do Zend (fornecerá links se necessário).

Você conhece algum outro projeto que faria qualquer desenvolvedor veterano de OOP derramar lágrimas de alegria?

Deixe-me acrescentar que a praticidade e o escopo de uso não são uma preocupação aqui - só quero fazer:

  • Escolha um projeto que tenha uma base de código considerada incrível pelos desenvolvedores muito melhor e maior que eu.
  • Escreva um código que atinja o que o projeto faz.
  • Compare os resultados e tente aprender o que não sei.

Basicamente, uma base de código de interesse acadêmico. Alguma recomendação, por favor?

Aditya MP
fonte
4
Não sou especialista, mas não acho que a OOP seja comum ou necessariamente incentivada em PHP.
asfallows
3
@asfallows De fato, esse foi o caso - mas com o lançamento do PHP 5.3, as coisas estão mudando e há uma inclinação definitiva no uso de todos os novos recursos que a linguagem fornece para a codificação OOP.
Aditya MP
3
Não existe um "design perfeito de POO".
Robert Harvey
11
Vejo que você já é membro do Code Review Stack Exchange. Usá-lo extensivamente, é a mais valiosa troca de pilha quando aprender, nós adoraríamos ver e discutir o código que você estará escrevendo enquanto aprendem sobre OOP ...
yannis
11
@Arkh Harsh. Vamos tentar evitar ataques pessoais. Se você não concordar com asfallows, reserve um tempo para escrever um comentário bem escrito.

Respostas:

2

O Symfony 2 é provavelmente o melhor projeto grande para aprender, mas é bem grande.

Recentemente, eu encontrei um projeto PHP simples e de código aberto chamado Phrozn (gerador de site estático). Sua base de código é relativamente pequena, para que você possa examiná-la rapidamente.

ATUALIZAR:

O Phrozn é moderno (usa PHP 5.3+ e depende muito dele), é extensível, possui uma cobertura de código rigorosa. Também reutiliza o código de outros projetos bem escritos, como Symfony (YAML), Zend (Autoloader), PEAR e Twig.

OOP, usa namespaces e está muito bem documentado. Não estou dizendo que seja perfeito nem que possa ser comparado a um projeto como o Symfony, mas vale a pena tentar.

Christian P
fonte
11
Você pode nos dar mais alguns detalhes sobre a base de código do Phrozn? O que o torna ideal para estudar, além do tamanho?
yannis
11
@YannisRizos :) O código pode ser encontrado no github, para que você possa dar uma olhada rápida. github.com/farazdagi/phrozn
Christian P
17

Bem, pessoalmente, eu diria que verifique o Symfony2 . É praticamente o melhor projeto de ponta a ponta que já vi. Isso não quer dizer que não haja partes ruins, mas como um todo, é muito bom.

Agora, Zend está no meio. Se você olhar para a API pública, é muito bom. Existem algumas partes do WTF, mas na maioria das vezes está tudo bem. Se você começar a pesquisar mais, encontrará muito mais código WTF ...

Na medida em que evitar completamente:

  • CodeIgniter - Modelo MVC Fubar
  • Kohana - Muita estatística
  • Cake - semântica de objetos PHP 4
  • Drupal - nem um pouco de POO
  • Wordpress - nem um pouco de POO

Quanto ao resto, você verá que é um sucesso e um fracasso. Existem peças boas e ruins para todos os projetos. Dê uma olhada no Lithium , ele tem alguns conceitos muito legais de design. Mas também possui muitos redirecionamentos de fubar e hackers para que isso funcione.

E é isso que levar ao banco. Não existe um design perfeito, não tente encontrar um. Em vez disso, olhe para muitos deles por aí e decida por si mesmo. Tente cada um, tente quebrá-los. Tente entendê-los apenas lendo-os (o que é um bom teste para o design são) ...

Apenas minha opinião pessoal ...

ircmaxell
fonte
2
+1 no symfony2, mas, mais importante, toda a comunidade construindo em torno dele. Também vale a pena mencionar o ZF2, embora eles pareçam manter as coisas mais abstratas.
Adrian Schneider
11
+1 para o symfony2 também. Ele tem uma base de código realmente sólida, usa muitas práticas recomendadas de outras linguagens e estruturas, uma ótima comunidade, os principais desenvolvedores são pessoas úteis e acessíveis. Embora o desenvolvimento continue refatorando as coisas ao longo do caminho para torná-las melhores, o status atual está pronto para produção. Fabien Potencier, criador do Symfony, tem uma série de postagens no blog ( fabien.potencier.org ) sobre a criação de uma estrutura com os componentes do Symfony. Deve ser um bom ponto de partida, pois ele escreveu esses posts para ajudar as pessoas a aprender coisas.
precisa saber é o seguinte
Ler o código-fonte do symfony2 é na verdade uma inspiração, apesar de não ser muito complexo de entender, bom ponto. No entanto, o TDD não foi desenvolvido, o que provavelmente seria uma pedra angular para o design "perfeito" OOP "" - porque nenhum design é perfeito, o que significa que você precisa alterá-lo e para isso precisa dos testes.
hakre
2
Bem, você não pode comparar Symfony, Zend ou Kohana com Wordpress e Drupal, seriamente.
Daniel Ribeiro
Obrigado! Eu baixei o Symfony, vou começar a entendê-lo. Obrigado por confirmar meus medos sobre o CodeIgniter: Uma vez ouvi no IRC do SilverStripe que "o CodeIgniter é um framework OOP para iniciantes e comete muitos erros para iniciantes" - e eles começaram a escrever no PHP4, mas não tiveram tempo de refatorar extensivamente Duvido que tenham usado todos os ótimos recursos que esse idioma oferece. Por favor, note que eu não estou dissing CI! Eu amo a estrutura e o céu sabe quantos projetos se tornaram mais fáceis para mim porque eu a usei. Mas, para fins de aprendizado, pode não ser o melhor.
Aditya MP