PHP tekrarlayan, sabit kodlanmış döngüler ve koşullarını kaldırmak

5 Cevap php

Bu soru ben PHP için bir cevap istiyorum C # hakkında sorular gördüm. Ben foreach döngüleri ve sadece okumak ve takip etmek zor kılan koşulların 4 sayfa olan bazı eski kodu var. Bunu nasıl daha fazla OO yapmak istiyorsunuz? Ben SPL İşlevleri kullanarak düşünüyordum ama henüz tam olarak nedir dahil anlamıyorum.

5 Cevap

Bu kod muhtemelen önemli ölçüde temizlenmeli ve SPL dokunmadan, OO yönünde çok itti olabilir.

SPL sadece () foreach gibi dil yapıları normal nesne davranışını değiştirmek istiyorsanız, veya (sonraki (), vb) (anahtar gibi operatör hem [] ve işlevleri)) (sayımı gibi yerleşikleri olarak, ya da dizi erişimi Fonksiyonlar gereklidir .

Cleanup suggestions:

  • If the same action is performed several (more than 1 or 2) times in the code, break it out into a function. If this action is to be performed on all elements in a array, consider using array_walk. If walking the array doesn't fit for some reason, use a loop :)
  • If you have several instances of some semantically connected data more complex than a key:value pair, with associated operations, consider wrapping it in a class. But a formally documented assoc. array might suit you just as well. Depends on your style, and on the type of data. The important thing here is the structuring of methods working on th data, and the documentation. Doesn't really matter if you make it a class or not.
  • After you have done the above steps, break the newly written functions and objects out into separate include files. I tend towards wrapping most everything in a class, so I mostly have one class pr. file. But some helper classes share a file with the main class, etc. You'll get a feel for it.

Ben olsaydım, ben test kodu yazarak başlamak istiyorum.

Eğer tam olarak üstlenmeden konum işlevselliğini tarif testcases bir dizi oluşturmak varsa, devam edin ve hala çalışır bilerek kod güvenli yazabilirsiniz.

PHPUnit bu başlangıç ​​için iyi bir yer olabilir.

Johnathan ve gnud bazı iyi bir tavsiyedir. SPL hakkında çok fazla endişe ve learn more about refactoring, ve ne refactoring tools are available for PHP bakmayın.

Ayrıca ben yeterince okuma tavsiye Working Effectively with Legacy Code edemez:

alt text

Ve tabii kanonik Refactoring Book:

alt metni

PHP kokuyor kod temiz tutmak zor bir dildir, ama biraz azim ile bu yapılabilir! Ve size kod tabanına bakmak zorunda, her gün kendinize teşekkür edecektir.

Ben doğru anlamak, sen foreach döngüleri (ve benzeri) 4 sayfa derin iç içe, ve hakkında duydum bu OO şey yardımcı olabilir eğer merak ediyor.

Kesinlikle devam edin ve yuvalama seviyelerini azaltmak için kodunuzu refactor ve okunabilirliği artırmak, ancak Nesne Yönelim ile bu karıştırmayın gerekir.

OO sonraki bu veri yapılarını işleyen kod veri yapılarının tanımını koymak kodunuzu yapılanma bir yoludur. Onun temel amaçlarından biri karmaşıklık enkapsülasyonlar sağlayarak okunabilirliğini için ise, OO bunu yapmak için tek yol değildir.

Henüz OO kavramlarını anlamak yoksa, daha kolay (umarım) her biri tek, basit bir görevi olacaktır ayrı fonksiyonlara iç döngüler içinde kodlarını ayırmak için kodunuzu refactor bulabilirsiniz.

Beni yanlış anlamayın; Özellikle daha verimli tasarım tartışmak için daha üst düzey kavramları ile geliştiriciler sağlamak için bir teknik olarak, OO bir savunucusu değilim. OO öğrenme değer.

Ama OO hakkında bir bilgi eksikliği döngüler dışında iç kodu çekerek ve tek amaçlı işlevler içine koyarak sizi durdurmak izin vermeyin.

(I OO bilgi, benim özür düzeyini yanlış varsa.)

Yavaş yavaş başlayın. bunu bir seferde bir parça refactor.

Eğer diziler çok üzerinde döngü varsa, array_map , array_walk , and friends. This is more a functional refactoring then an OO refactoring, but it would carry you pretty far. If daha OO gitmek mantıklı gibi dizi fonksiyonları bakmak, o zaman bazı olacak gerektiği gibi sonra uygun sınıflara itebilir fonksiyonları.