Pergunta

Há muitos debates sobre se a Programação Orientada a Objeto é bom ou não.Mas, usando OOP em Php é mais lento.Seria uma boa troca para o uso de programação de procedimento e maior velocidade de OOP com velocidade mais lenta (uma vez que as classes devem ser iniciadas a cada vez que uma página é carregada, e grandes sites vão começar a ficar lento).

Mais importante ainda, não seria bom para embrulhar coisas dentro de uma classe e a utilização de funções estáticas ou seria melhor apenas ter muitos deitado funções com um prefixo ex:wp_function().

Foi útil?

Solução

Sim, é quase sempre uma boa ideia usar OOP. Isso ocorre porque o OOP é um estilo de codificação, e os estilos de codificação, na maioria das vezes, podem ser facilmente transferidos para os idiomas.

As pessoas não usam estilos de codificação porque usam um determinado idioma. As pessoas usam estilos de codificação porque o estilo de codificação oferece bons métodos para fazer coisas que consideram desejáveis. Portanto, desde que os elementos básicos estejam lá (herança, propriedades de classe, etc.), sempre será viável escrever nesse estilo de codificação.

Não, usar funções processuais para acessá -las provavelmente não é uma boa ideia. Isso ocorre porque você provavelmente terá que fazer algo assim para manter o estado.

function myFunc()
{
    global $class;
    $class->doMethod();
}

function myFunc2()
{
    global $class;
    $class->doMethod2();
}

Essa é uma má idéia, pois cria uma tonelada de estado global.

Outras dicas

Se o motivo pelo qual você está preocupado em usar OO com PHP é velocidade, não tema: o PHP é uma linguagem lenta por toda parte. Se você está fazendo algo que intensiva o processador o suficiente para que a perda de velocidade do uso de objetos seja importante, não deve usar o PHP.

No que diz respeito às funções estáticas, essa é uma opção de design, mas eu erraria do lado de evitar classes compostas inteiramente de funções estáticas. Realmente não há vantagem sobre prefixos e usar uma construção apenas porque não há uma boa ideia.

Os mesmos argumentos sobre o desempenho foram feitas sobre objective-C e C++ de volta no dia.E a resposta para esse problema foi aproveitar a memória disponível e energia de processamento, que é continuamente ficando maior, melhor e mais rápido.

Sim, OO requer mais recursos para executar.Mas os benefícios do uso de OO superam o custo de hardware $$ (que é susceptível de ser insignificante) de apoio OO aplicações.

É, no entanto, uma boa coisa para estar preocupado com o desempenho do software.No entanto, olhando sob o capô processual vs.oo como um lugar para começar é um pouco equivocada.Você precisa estar focado em escrever um código eficiente para começar, quer de natureza processual ou OO (e ambos são relevantes).

Tenha em mente que mesmo que o PHP pode não ser o mais rápido plataforma lá fora (Java, por exemplo, chuta sua bunda) do PHP é utilizado para a alimentação de alguns dos mais tráfego pesado sites na Internet:nomeadamente o Facebook.

Se você tiver outras dúvidas sobre o PHP e OO, basta olhar para o Zend e Magento (com base no Zend).Magento é um MUITO uso intensivo de recursos da plataforma, de uso de memória pode ser mais de 36MB por exemplo.No entanto, a plataforma em si é capaz de lidar com milhões de hits.Isto é porque um correctamente configurado o ambiente de servidor com uma saudável dose de recursos de hardware, fazer todos os benefícios do uso de OO longe, ofuscar o custo do próprio servidor.Mas em um mundo de computadores em cluster, usando o poder de processamento e de memória (de forma responsável) disponíveis para você é--IMHO--clínicos insanidade.

Na minha humilde opinião, os desenvolvedores de PHP não devem tentar ir exclusivamente uma direção. (Procedtural vs Orientado a objetos) Em alguns casos, tudo o que você precisa são de algumas funções globais, outras vezes é mais benéfico usar objetos. Não tente forçar tudo de uma maneira ou de outra, seja flexível e use o que funciona melhor para cada situação.

Eu discordo totalmente da resposta de Chacha102.

Uma resposta adequada a essa pergunta preencheria vários livros - não importa um post de 20 linhas aqui.

Ambas as abordagens têm seus benefícios e desvantagens. Eu recomendaria qualquer pessoa que queira se considerar um bom programador para ter uma experiência significativa em programação processual, não procedural e orientada a objetos. Bem como experiência com diferentes metodologias, como scrum, cascade e rad.

Em relação à adequação do PHPS para a codificação OO vs processual, certamente as raízes do idioma estão neste último (mas observe que Java e ASP são híbridos e não idiomas OO verdadeiros).

Perronalmente, tendem a escrever código processual quando preciso produzir algo que seja muito simples ou deve ter seu comportamento para ser mais definido e previsível. No entanto, ao escrever um código complexo em que o comportamento varia muito em tempo de execução, acho que o OO é muito mais eficiente em termos de tempo do desenvolvedor-apesar do design ser baseado em um conjunto finito de casos de uso.

Para argumentar que você deve sempre escrever código processual porque ele será executado mais rápido que o código OO:

1) não é necessariamente verdade 2) ignora totalmente o custo relativo do tempo do desenvolvedor vs custos de hardware

Seria bom envolver coisas dentro de uma aula e usar funções estáticas

Dado que os namespaces estão agora disponíveis no PHP, essa é uma maneira realmente confusa de evitar colisões de namespace e não algo que eu recomendaria.

C.

Não há realmente nenhuma resposta perfeita, pois depende de muitas variáveis desconhecidas e, em seguida, ele não tem que ser tudo ou nada.

Por exemplo, se você dividir a sua aplicação para o modelo MVC, você pode ter o seu Modelo OO, mas manter o Controlador mais simples processuais.

Você pode usar classes como meio para simplesmente comum do grupo de funções estáticas, ou você poderia levá-lo muito mais para o active padrão de registro.

Se você está construindo um pequeno única página de formulário da web que dispara um POST off em um e-mail, você realmente não precisa de OO--para que você, talvez, incluir um correio existentes da classe para alavancagem.

Ninguém pode dar-lhe um aconselhamento adequado e sem entender o projeto que você está tomando.

O que disse, se a sua única preocupação é velocidade, em seguida, OO vai ser um pouco mais lento.E há um monte de sneaky coisas que você pode fazer em até processuais PHP para imitar alguns OO ganhos.Mas a menos que você está assumindo um grande projecto, a sobrecarga adicionada nunca vai muito significativa.E pelo tempo que você tem um grande projeto, os profissionais da OO pode superam os contras de sua sobrecarga.

Eu estava curioso para isso. Infelizmente, depois que mudei meu código de procedimento para OOP, executei alguns benchmarks e não de antemão.

Aqui está o código de referência.

class game{
  function maxp($val){
    return max(0,pow($val,0.5));        
  }
}

$game = new game;

for($i=0;$i<100000;$i++){
  $game->maxp(100);
  //game::maxp(100);
}

Os resultados da OOP variaram entre 0,13 e 0,2 segundos;

Os resultados processuais variaram entre 0,08 e 0,1 segundos.

Os resultados permaneceram consistentes por um bom tempo.

Convido você a executar seus próprios testes.

Php 5.4.3

A OOP tem mais méritos do que seus desmames. Veja Php OOP, quais são os benefícios?. Veja também OOP vs PP em PHP.

Sim, à medida que seu aplicativo cresce .. (e será), ele economizará muitas horas de frustração. E repetindo -se (copiando o código de coleta em todo o lugar) .. :)

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