Pergunta

Eu vi essa pergunta sobre C # Eu gostaria de uma resposta para PHP. Eu tenho algum código antigo que tem 4 páginas de foreach loops e condições que apenas torna mais difícil de ler e seguir. Como eu poderia fazer isso mais OO? Eu estava pensando em usar funções SPL mas não compreender totalmente o que está envolvido ainda.

Foi útil?

Solução

Este código pode provavelmente ser limpo de forma significativa, e empurrou longe na direção de OO, sem tocar SPL.

SPL só é necessário se você quiser alterar o comportamento objeto normal em construções de linguagem como foreach (), ou em builtins como COUNT (), ou em funcitons acesso de array (ambos operador [] e funções como chave (), ao lado ( ) etc).

sugestões de limpeza:

  • Se a mesma acção é realizada vários (mais do que 1 ou 2) vezes no código, dividi-lo em uma função. Se esta ação deve ser realizada em todos os elementos em uma matriz, considere o uso array_walk . Se andar a matriz não se encaixa, por algum motivo, use um loop:)
  • Se você tiver várias instâncias de alguns dados semanticamente ligadas mais complexas do que um par chave: valor, com operações associadas, considere envolvê-lo em uma classe. Mas uma assoc formalmente documentada. série poderia servi-lo tão bem. Depende do seu estilo e do tipo de dados. O importante aqui é a estruturação de métodos de trabalho no th de dados e da documentação. realmente não importa se você faz uma classe ou não.
  • Depois de ter feito os passos acima, quebram as funções recém-escritos e objetos out em separado incluir arquivos. I tendem para embalar quase tudo em uma classe, então eu principalmente ter um pr classe. Arquivo. Mas algumas classes auxiliares compartilhar um arquivo com a classe principal, etc. Você vai ter uma sensação para ela.

Outras dicas

Se eu fosse você, eu ia começar a escrever código de teste.

Se você pode construir-se um conjunto de casos de teste que descrevem completamente a funcionalidade que você está refatoração, você pode ir em frente e reescrever seu cofre código no conhecimento de que ele continuará a funcionar.

PHPUnit pode ser um bom lugar para começar com isso.

Se eu entendi corretamente, você tem foreach loops (e similares) aninhados 4 páginas de profundidade, e você está se perguntando se essa coisa OO que você já ouviu falar sobre pode ajudar.

Você certamente deve ir em frente e refatorar seu código para reduzir os níveis de aninhamento, e melhorar a legibilidade, mas não confunda isso com Orientação a Objetos.

OO é uma forma de estruturar o seu código para colocar a definição das estruturas de dados junto ao código que manipula essas estruturas de dados. Enquanto um dos seus principais objetivos é para facilitar a leitura, fornecendo encapsulamentos de complexidade, OO não é a única maneira de fazê-lo.

Se você ainda não entender os conceitos de OO, você pode achar que é mais fácil de refatorar seu código para separar o código dentro das presilhas internas em funções separadas que (espero) vai cada um tem uma única tarefa, simples.

Não me entenda errado; Eu sou um defensor de OO, especialmente como uma técnica para fornecer aos desenvolvedores com conceitos de alto nível para discutir projeto de forma mais eficiente. OO vale bem a pena aprendizagem.

Mas não deixe que a falta de conhecimento sobre OO você parar de puxar o código interno para fora das alças e colocá-los em funções de propósito único.

(Se eu tenha entendido mal o seu nível de conhecimento OO, minhas desculpas.)

Comece devagar. refatorar-lo uma peça de cada vez.

Se você está looping sobre um monte de matrizes, olhar para as funções de matriz como array_map , array_walk , e amigos. Esta é mais uma refatoração funcional em seguida, um refactoring OO, mas seria levá-lo muito longe. Se que fazia sentido ir mais OO, então você vai ter algumas funções que você poderia, então, empurrar para as classes apropriadas conforme necessário.

Alguns bons conselhos de Johnathan e gnud. Não se preocupe tanto com o SPL, e saber mais sobre refatoração , e olhar para o que estão disponíveis para PHP .

Também eu não posso recomendar a leitura suficiente trabalhar efetivamente com Legacy Code :

text alt

E, claro, o canônico Refactoring Livro :

texto alt http://ecx.images-amazon.com/images/I/519XT0DER6L._SL500_BO2,204,203,200_AA219_PIsitb-sticker-dp-arrow,TopRight,-24,-23_SH20_OU01_.jpg

PHP é uma linguagem difícil de manter limpo do código de cheiros, mas com um pouco de perseverança que pode ser feito! E você vai agradecer a si mesmo a cada dia você tem que olhar para a sua base de código.

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