Pergunta

Eu li alguns posts onde as pessoas têm afirmado (não sugeridas, não discutidos, não oferecidos) que o PHP não deve ser utilizado para grandes projetos.

Sendo um desenvolvedor principalmente PHP, eu fazer duas perguntas:

  1. O que define um "grande projeto"?
  2. Por que não? Quais são as armadilhas da utilizando PHP

Eu corro uma equipe de desenvolvimento pequeno e eu sei por experiência a construção qualidade, organização, documentação, comentando e encapsulamento são nossa maior prioridade. Nós somos capazes de desenvolver grandes projetos usando nossa própria estrutura e abordagem, mas ainda assim, eu não quero investir mais se eu estou perdendo meu tempo.

Os pensamentos?

Foi útil?

Solução

Eu realmente odeio quando as pessoas dizem para fora plana que PHP é uma linguagem terrível, porque você pode escrever código que mistura apresentação com lógica, ou que você pode permitir a injeção de SQL. Isso não é nada a ver com a linguagem, que é o desenvolvedor.

PHP provou ser altamente escalável: Wikipedia é um dos sites maiores e mais populares na Internet e funciona PHP. Disse o suficiente?

Há uma série de ferramentas / bibliotecas lá fora, que lhe dão uma estrutura para trabalhar, tornando menos provável que alguém vai escrever pobre código, menos sustentável: ver CakePHP, Symfony, DOP, Smarty, etc etc etc.

Ele recebeu uma má reputação porque é uma língua que tem muito baixas barreiras à entrada: é grátis, você pode obter PHP muito barato hospedagem, a documentação é o melhor que existe , há abundância de tutoriais on-line, além de que faz um monte de coisas muito fácil (por exemplo: abrir uma URL e obter o conteúdo do arquivo: file('http://www.google.com');). Isso significa que um monte de novatos pegou e fez um monte de sites muito desertor com ele, mas isso vai acontecer com qualquer linguagem que você escolher como seu primeiro.

Trabalhar com um quadro ORM sólido (há cerca de 30 perguntas sobre SO sobre o que é melhor), e ele irá tratá-lo bem.

Outras dicas

Um monte de pessoas que não dizem usá-lo realmente estão dizendo não usam PHP 4. Tudo se resume a esta

você pode escrever bom código em qualquer idioma

e

você pode escrever código ruim em qualquer idioma

PHP pode muitas vezes se presta a bibliotecas de código espaguete tornar-se emaranhados e fazer a sua 'aplicação' realmente apenas uma série de scripts (veja Moodle para um bom exemplo disso ...)

Eu acho que um monte de 'Não use PHP para coisas grandes' é proveniente de PHP ser cortado a partir é o propósito original: a linguagem de templates. Que eu posso entender, mas existem muitos projetos que provar que você pode fazê-lo (Drupal, MediaWiki, Facebook).

Não há nenhuma razão você não pode usar o PHP para grandes projetos. Afinal de contas, o Facebook é construído em PHP. Haverá questões no entanto, mas há problemas com qualquer grande projeto.

O que torna PHP tão difundida é a baixa barreira à entrada e hospedagem barata. Ele é executado como uma extensão Apache e você pode praticamente só iniciar a codificação. Se você vai para mais plataformas empresariais, tais como .Net ou Java, eles têm uma barreira muito maior a entrada, mas eles também vêm com um monte de infra-estrutura para ajudá-lo a fazer aplicações que escala.

Por exemplo, o banco de dados de captação em PHP é (imho) fraco. É fornecedor específico. Com o MySQL, as pessoas tendem a fazer coisas como:

function get_users($surname) {
  mysql_query("select * from users where surname = '$surname'");
  ...
}

o que é ruim por várias razões:

  • Não faz mau uso do cache de consultas;
  • Não lidar escapar de caracteres (que, é claro, pode ser feito com mysql_escape_string() mas você ficará surpreso quantas vezes as pessoas não fazem isso); e
  • É bastante fácil de código de tal forma a permitir ataques de injeção SQL.

Pessoalmente eu prefiro mysqli por todas as razões acima, mas que tem o seu próprios problemas: a saber que o uso de campos LONGTEXT trava mysql e tem feito desde pelo menos 2005, com ainda sem correção (sim, eu e vários outros têm levantado um bug) <. / p>

Compare isso com Java (com o qual estou mais familiarizado) e JPA ou Ibatis são muito melhores soluções ORM com custos iniciais mais elevados, mas eles vão ajudá-lo em uma escala empresarial.

Então, você não está proibido de fazer grandes projetos em PHP. É simplesmente mais difícil na medida em que você tem que fazer cada vez mais trabalhar-se para replicar o que as outras plataformas de fornecê-lo.

Dito isto, PHP + memcached / APC + beanstalkd vai um longo caminho.

Oh, isso é outro problema: PHP realmente não suporte o processamento de fundo ou threading. Você precisa de algo mais para que (ou scripts de autônomos). Se você estiver usando uma outra coisa, por que não usar isso para as coisas Web também (por exemplo, Java, Ruby, Net, etc)?

Como o I ligada foi eliminado, eu vou colocar alguns dele aqui:

Pergunta

Eu fiz um comentário tongue-in-cheek em outro segmento pergunta chamando PHP uma linguagem terrível e desceu votado como um louco. Aparentemente, há muitas pessoas aqui que amam PHP.

Então, eu estou realmente curiosa. o que estou perdendo? O que torna PHP uma boa linguagem?

Aqui estão as minhas razões para não gostar dele:

  • PHP tem de nomeação inconsistente de funções embutidas e biblioteca. padrões de nomenclatura previsíveis são importantes em qualquer projeto.

  • PHP tem inconsistente ordenação parâmetro de funções embutidas, por exemplo array_map vs. array_filter que é irritante nos casos simples e levanta todos os tipos de comportamento inesperado ou pior.

  • Os desenvolvedores PHP constantemente deprecate funções internas e abaixar-nível de funcionalidade. Um bom exemplo é quando eles preterido passagem por referência para funções. Isto criou um pesadelo para qualquer um que faz, digamos, retornos de chamada de função.

  • A falta de consideração no redesenho. A depreciação acima eliminou a capacidade de, em muitos casos, fornecer valores de palavra-chave padrão para as funções. Eles fixo isso em PHP 5, mas eles obsoleta a passagem por referência em PHP 4!

  • Má execução de espaços de nome (anteriormente sem espaços de nomes em tudo). Agora que existem espaços de nomes, o que usamos como o personagem dereference? Barra invertida! O caractere usado universalmente para escapar, mesmo em PHP!

  • excessivamente amplas ligações conversão implícita de tipo para bugs. Não tenho nenhum problema com conversões implícitas de, digamos, float para inteiro ou vice-versa. Mas PHP (última vez que verifiquei) terá todo o prazer tentar converter magicamente um array para um inteiro.

  • desempenho recursão Pobres. Recursão é uma ferramenta de fundamental importância para a escrita em qualquer idioma; ele pode fazer algoritmos complexos muito mais simples. apoio pobres é indesculpável.

  • As funções são caso insensível. Eu não tenho idéia o que eles estavam pensando em um presente. Uma linguagem de programação é uma forma de especificar o comportamento tanto a um computador e um leitor do código sem ambigüidade. introduz caso insensibilidade muita ambiguidade.

  • PHP encoraja (praticamente exige) um acoplamento de processamento com apresentação. Sim, você pode escrever PHP que não fazê-lo, mas é realmente mais fácil de escrever código no incorreta (a partir de uma perspectiva de design de som) forma.

  • desempenho PHP é abismal sem cache. Alguém vender um produto cache comercial para PHP? Oh, olhar, os projetistas do PHP fazer.

O pior de tudo, PHP convence as pessoas que a concepção de aplicações web é fácil. E, de fato, fazer a maior parte do esforço envolvido muito mais fácil. Mas o fato é, projetando uma aplicação web que é ao mesmo tempo seguro e eficiente é uma tarefa muito difícil.

Ao convencer tantos para ocupar programação, PHP tem ensinado um subgrupo inteira de programadores maus hábitos e más do projeto. É-lhes dado acesso a recursos que lhes falta a compreensão de usar com segurança. Isto levou a reputação do PHP como sendo inseguro.

(No entanto, eu prontamente admitir que PHP não mais ou menos seguro do que qualquer outra linguagem de programação web é.)

O que é que eu estou sentindo falta sobre PHP? Eu estou vendo um cultivados organicamente confusão, mal de gestão de uma linguagem que está desova programadores pobres.

Então me convencer do contrário!


Top Rated Resposta

Eu vou tomar uma facada em responder a cada um dos seus pontos de bala

PHP tem de nomeação inconsistente de embutido e funções de biblioteca. padrões de nomenclatura previsíveis são importante em qualquer projeto.

I tanto amor e ódio este tema. Porque em sua essência, esta questão está correta. Por que alguns função split bi-palavra com um sublinhado, e alguns não são?Por que os parâmetros de agulhas e palheiro trocar posições na assinatura argumento às vezes? É ridículo. Mas no final do dia ... isso realmente importa? Meu IDE com intellisense e php.net apenas um navegador clique de distância, este é simplesmente não tão grande de um negócio. É um negativo contra o PHP como uma linguagem? Sim. Será que impedem a minha capacidade de ser um programador eficaz? Não.

Os desenvolvedores PHP constantemente deprecate embutido e funções Baixa-nível de funcionalidade. Um bem exemplo é quando eles obsoleto passagem por referência para funções. este criou um pesadelo para qualquer um que faz, digamos, retornos de chamada de função.

Pessoalmente, penso que este não é um ponto bom. Deprecation é necessária para a evolução de uma língua, especialmente um que tem tanto Kruft como PHP faz. PHP recebe um monte de críticas por "tornando mais fácil para ser um programador ruim *", mas, ao mesmo tempo, o grupo PHP também fica em apuros quando tentam remover construções estúpidas da língua, tais como chamadas em tempo passagem por -referência. Eliminando chamadas em tempo passar por referência foi um dos melhores movimentos que eles já feitos. Não havia nenhuma maneira fácil para um desenvolvedor iniciante para atirar no próprio pé do que com este "recurso".

A falta de consideração no redesenho. A suspensão de uso acima eliminado o capacidade de, em muitos casos, fornecem valores padrão de palavra-chave para as funções. Eles fixo isso em PHP 5, mas eles obsoleta a passagem por referência na PHP 4!

Eu não acho que há uma falta geral de consideração em tudo, eu acho que você foi picado por esta mudança particular e ficaram com um gosto amargo na boca. alterações de linguagem são muitas vezes conhecidos meses ou mesmo anos antes do tempo. Um guia de migração foi fornecida para o movimento de 4 para 5, e as diferenças de versão estão documentadas no manual. Chamada-time pass-by-reference era um "recurso" horrível e não dá ao desenvolvedor de qualquer poder expressivo eles não podem obter por outros meios. Fico feliz que se foi (juntamente com outra porcaria como magic quotes)

Má execução de espaços de nomes (Anteriormente sem nome espaços em tudo). Agora que existem espaços de nomes, o que nós usamos como o personagem dereference? Barra invertida! O caractere usado universalmente para escapar, mesmo em PHP!

Eu tenho sentimentos mistos sobre este. Parte de mim acha que "quem se importa, caráter escapar não possui exterior significado de uma seqüência de qualquer maneira", e parte de mim pensa que "certamente eles poderiam usar algo melhor". Mas poderiam? Eu não sei, eu não sou um desenvolvedor para o analisador Zend. É um enorme descuido que até 5,3 PHP nunca teve namespaces em tudo? Sim, absolutamente.

excessivamente ampla conversão implícita de tipo leva a erros. Não tenho nenhum problema com conversões implícitas de, digamos, float para número inteiro ou vice-versa. Mas PHP (última I marcada) terá todo o prazer tentar mágica converter uma matriz para uma inteiro.

Eu acho que é ok para discordar com a forma como PHP faz isso, mas discordam que torna a linguagem "ruim". Mas me perguntam o quanto eu quero sentar neste tópico e discutir sobre fraca vs tipagem forte. (P. S. Eu não, em tudo ) Para o registro: PHP irá emitir um erro nível E_WARNING quando o tipo de uma matéria de argumentos e não pode por resolvido por coerção.

desempenho recursão Pobres. Recursão é uma ferramenta de fundamental importância para escrever em qualquer idioma; ele pode fazer algoritmos complexos muito mais simples. Pobre apoio é indesculpável.

PHP é uma DSL para a web. Eu venho fazendo isso em tempo integral durante 8 anos e talvez usado recursão 4 ou 5 vezes, geralmente por algum tipo de diretório chato ou travessia XML. Não é apenas um padrão que é necessário para o desenvolvimento web, que muitas vezes. Não estou desculpando o desempenho lento, mas esta é uma questão acadêmica muito mais do que isso é um i de produçãossue. Se você precisa realmente poderoso desempenho recursiva, PHP já é o idioma errado para você.

As funções são caso insensível. eu tenho idéia do que eles estavam pensando em este. Uma linguagem de programação é uma maneira de especificar o comportamento tanto a um computador e um leitor de código sem ambigüidade. caso insensibilidade introduz muita ambiguidade.

I totalmente 100% concordam com isso.

PHP encoraja (praticamente exige) um acoplamento de transformação com apresentação. Sim, você pode escrever PHP que não fazê-lo, mas na verdade é mais fácil de escrever código no incorreta (A partir de uma perspectiva de design de som) maneira.

* Hmmm, este tópico sons desesperadamente familiar ...

Mas, falando sério, acho que é notável que as pessoas vão reclamar de uma linguagem que será absolutamente 100% permitem implementar qualquer sistema de saída desejado (o grande volume e estilo de sistemas de templates PHP só fala a este) - OU - pular tudo que sobrecarga e de saída apenas directamente. Isso não faz PHP mau de todo. É parte do que torna PHP bom.

desempenho PHP é abismal sem caching. Alguém vender um comercial caching produto para PHP? Oh, olhar, o designers do PHP fazer.

Você caching bytecode média (como um acelerador), ou o cache de saída?

Se o primeiro, então eu realmente não sei o quanto eu me preocupo com esse assunto. Aceleradores são gratuitos e fáceis de executar. Poderíamos discutir sobre por que não é parte da linguagem, mas no final, eu não acho que isso importe muito.

Se você está falando sobre o cache de saída, então eu não sei o que dizer a você. Qualquer projeto web com as necessidades de tráfego significativo cache (podcast de semente # 27, por exemplo). Este não é um problema específico do PHP em tudo .

Em resumo, eu acho que você considera PHP uma linguagem "ruim" de uma forma muito acadêmica. E em seu post anterior que estava provavelmente rejeitada por pessoas como eu que usam PHP para "fazer as coisas".


Segundo Top Rated Resposta

Todas as suas críticas (e mais alguns) são válidos. Você são permitidos e até mesmo esperado para odiar PHP.

Mas, novamente, ele tem alguns benefícios:

  • Ubiquitous
  • Rápido (especialmente usando caches opcode)
  • comunidade enorme (e excelente documentação)
  • Obras

Finalmente, você pode superar muitas, se não todas as desvantagens de escrever código bom você escreveria em qualquer outra língua. Você pode escrever sólida, segura e bom cheiro de código em PHP, que muitas vezes vai correr mais rápido e ser mais fácil de acolhimento e escala do que muitas alternativas.


Terceiro Top Rated Resposta

O que é que eu estou sentindo falta sobre PHP? Eu estou vendo um cultivados organicamente, bagunça mal de gestão de uma linguagem que está gerando programadores pobres.

Simples. O fato de que os programadores pobres ficam muito defensiva sobre sua língua. ;) PHP é fácil de aprender, muito mais fácil do que as alternativas, e uma vez que você aprendeu isso, não é exatamente óbvia 1) o que há de errado com PHP, 2) como as alternativas são melhores, e 3) como alternar para, e aprender, uma das alternativas.

E talvez o fato de que, bem, quais as alternativas que as pessoas têm? ASP? Que tem muitos problemas por conta própria, de ser incapaz de executar na maioria dos servidores web (Apache), com algumas escolhas de design ridículo e overengineered por conta própria (webforms? Viewstate? AJAX onde suas solicitações assíncronas" são interceptados e executar sequencialmente ?) Ruby on Rails? Bem, talvez, exceto quantos servidores web apoiá-lo novamente? Não é exatamente facilmente acessível no momento. E é lento. Então, talvez a "força" do PHP é realmente que nenhum boa existe alternativa. Pelo menos este é por isso que eu ficar longe de toda a programação web quando possível. PHP é uma porcaria, e eu não estou muito interessado em qualquer um dos the alternativas também.

PHP tem tantos problemas fundamentais que não é mesmo engraçado. Da falta de suporte a Unicode, para as muitas conversões de tipo implícito que muitas vezes levam a falhas de segurança inesperadas, a mistura completa de apresentação e ... tudo o resto, ou para o módulo de banco de dados padrão que não faz (última vez que verifiquei) uso consultas parametrizadas. Estamos falando de uma linguagem feita para duas coisas, acesso à base de dados e HTML geração, e que é terrível em ambos.

É apenas uma confusão desagradável, uma linguagem concebida por pessoas que não são qualificados, ou capaz, para projetar uma linguagem. ;)


Para mim, o pior pecado PHP é o acoplamento de apresentação com lógica de negócios. Não é que você não pode escrever isso de uma maneira melhor, mas não incentivá-lo a, e se alguma coisa incentiva você não para.

Um grande número de vulnerabilidades de segurança estão associados com sites PHP, também. Eu não posso provar é desproporcionado (afinal um monte de sites são escritas em PHP), mas eu suspeito que é. Se eu estiver certo, então desde vulnerabilidades de segurança são uma classe de erro, I sites PHP suspeitos tendem a ser mais de buggy em geral também.

(Eu não acho que apontando para alguns sites grandes e dizendo que eles conseguiram fazê-lo em PHP é qualquer argumento contra isso, pela maneira. É um pouco como dizer que os cigarros não causam câncer, porque a sua próxima vizinho defumado e viveu até os 100).

Confira esta pergunta similar - Sites Can PHP alça nível empresarial, bem como Java

Recapitulando - Facebook, Wikipedia, Yahoo.com, Digg, Flickr e muitos outros sites gigantes estão em execução no PHP. Se você alguma vez chegar perto de fazer algo desse calibre, você ainda pode ter certeza que você pode chegar lá com PHP.

Como sustentável, prorrogável, confiável, segura e PERFORMANT suas aplicações será é inteiramente até você e é a linguagem-agnóstico. Em favor do PHP, porém, ele tem ferramentas muito convenientes para a construção de aplicações web.

Para mim, e falando sobre grandes projetos ou mesmo enormes, ele (principalmente) se resume a uma palavra:. Dependências

O problema com uma linguagem de script é como em todas as coisas no mundo:. A maior vantagem é a maior desvantagem ao mesmo tempo

A maior vantagem é a de código livre e rápido. Basta escrever um script e vai servidor-lo de propósito. No detalhamento necessário, basta código.

A maior desvantagem é, de certa forma, para verificar se este script não é perturbar os outros scripts. Ou melhor: Alterar um script velhos outros estão contando com. Tem a certeza que todas as dependências fazer o trabalho para fora como você desejado?

Isso não é verdade para a geração de "normal" página web, quaisquer meios normais aqui. Mas nós temos um produto depender de alguns 500k linhas de código-fonte, com customizações para clientes que consiste em um adicional de 100 mil linhas de código, também. E eu sou mortal feliz que um compilador verifica todas as dependências e avisa / erros me no caso eu fiz algo errado (como, falando mais baixo nível aqui, misstyping uma chamada variável ou método).

Eu acho que isso eo fato de que outras línguas fornecer mais simples de usar "enterprisy" apresenta, pela sua natureza (ou seja, servidores de aplicativos para "usos Banco") ferve-lo por isso que muitos não vêem PHP em grande (ou melhor :. enorme) projetos

Há algo sobre a construção da linguagem PHP que não é bom o suficiente para mim. Por exemplo, o nome das funções. É um não melhor utilização prática de várias maneiras para nomear uma função em um idioma. A mistura entre sublinhados (function_name), palavras grudadas (functionname), etc. I dizer, esta é realmente uma confusão. Há muitas funções que são muito semelhantes ou fazer as mesmas coisas, mas seus nomes são tão confuso. Este não é característica de uma boa linguagem de programação.

Em grandes implantações, a linguagem deve ser suficiente específica fácil e escrever. Algo que omite PHP como a declaração de tipos de variáveis, tornam-se muito difíceis de entender e lidar com mais tarde.

Outro ponto é a adição constante de recursos e cancelamento de algum outro. Ela supõe que a adição de OOP em PHP 5 vai fazer as coisas mais fáceis para os programadores, mas que sobre as considerações de compatibilidade de volta?

A principal razão que esta linguagem de programação é como ela é, é devido às suas origens: Pessoal Página. Ele não foi projetado para grandes implantações.

Eu sei que há grandes esforços para tornar esta língua uma língua de peso empresa, e, pessoalmente, eu estou esperando por uma boa linguagem de programação do lado do servidor de código aberto o suficiente; mas até esse dia chegar, vai correr muita água debaixo da ponte.

A nossa empresa executa vários sites de grande ish usando PHP, e não tiveram problemas que foram relacionados com a língua.

Estas são todas boas respostas.

Eu era um novato. Eu só estive de codificação por 5 anos mas eu apoio e gerenciar diretamente 85 pequenas a grandes sites e eu vou te dizer que, o potencial para ser processado por ter um baixo site para um dia irá contribuir muito para o seu desejo de aprender como e fazer melhor código.

É bom ouvir desenvolvedores estabelecidos partilhar os seus pensamentos sobre este assunto. Eu não acho que PHP é a melhor, mas parece que meu investimento em "melhores práticas" é bem servida.

Obrigado a todos!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top