PHP ve temiz kod yazma

6 Cevap php

Im PHP yazmak için en iyi uygulamaları bulmak için çalışıyor.

Ben sadece bu kötü bir alışkanlık olduğunu merak ediyorum.

Örneğin, işlem değişkenleri.

$var = 1
$var = doSomething($var);
$var = doSomething2($var);
$var = doSomething3($var);

Bu biraz kötü görünüyor.

İşte ben yaptım gerçek bir kod örneği:

$this->rSum = explode(",", $this->options["rSum"]);
$this->rSum = array_combine(array_values($this->rSum), array_fill(0, count($this->rSum), 0));

Birisi bana temiz kod yazma, bazı iyi öğreticiler geçebileceği genellikle güzel olurdu!

Onun beni tekrar aptal sorular soruyor. :)


Bu arada ..

Modellerde ne kadar otomatik işleme olabilir?

Ben bir idam yöntemi olan bir model var ve ben onu çağırdığınızda, bir tanım dosyası okuma ve veritabanı sorguları yapma gibi bir çok şey yapar.

Örneğin

$object = new Object()
$object->setFile("example.txt");
$object->execute();

// Then i can fetch things from it
echo $object->getName();

6 Cevap

Ben gerçekten (gerçek) kodu gibi ve (ben ZF kazmak için çok zamanım olmadı ama mesela ARMUT [onlar da kendi kodlama standartları] IMO sadece korkunç) diğer kişiler kodu gibi benim için de çok zor genellikle bulunuyor Eğer verdiği ilk örnek aptal görünüyor ama ikincisi ile ilgili, en azından benim için ve size tutarlı bir kodlama tarzı var ve doğru miktarda ve sağ whitespaces kullanıyor görünüyor sağlanan kısa pasajı anlamak gerçekten çok kolay yerler - (inanmıyorsanız eğer bana sadece bazı Perl parçacıkları bir göz atın) temiz kod için bir çok sayar.

Ben sadece üç şey işaret etmek istiyorum:

  1. rSum ne değerler tutun yok oldukça açık olmayan bir özellik için korkunç bir isim olmamasına rağmen Semantics:, belki de bu özellik için daha açıklayıcı bir isim bulabiliriz?
  2. Variable Reuse: As I said before your first example seems stupid but it's actually smart to reuse variables for two main reasons:
    1. Sen hafıza boşa harcamayın.
    2. Ve sen ile çalışıyoruz kapsamını kirletmez.
  3. Eğer doğru fonksiyonları kullanırsanız ikinci "gerçek" bir örnek daha temiz ve daha hızlı olabilir:

    $ This-> rSum = array_flip (explode ("", $ this-> seçenekler ["rSum"]));

EDIT: Ben sadece burada, başka bir çalışma alternatif (0 beynim tarafından işlenmedi) yaptığınızı oldukça ne Yukarıda verilen kodu fark ettim:

$this->rSum = array_fill_keys(explode(",", $this->options["rSum"]), 0);

Orada ancak, yukarıdaki kodu, açık, verimli ve açıklayıcı olduğuna inanıyorum tek gömlekleri sevmiyorum burada bir sürü insan gibi görünüyor - ama bu sadece benim olabilir ... =)

Akıllı kod bence mutlaka iyi bir kod değildir. Ben şahsen kodu anlamak için, temiz, basit, kolay tercih ederim. init "kötü" kod karşı olarak 2 liner, senin armut sert düşünüyorum yapacaktır.

O zaten sadece benim almak bulunuyor.

Kodlama standartlara ek olarak, PHP_CodeSniffer varolan kod genel ipuçları elde etmek için kullanabilirsiniz.

Jim Li ile kabul etti, ben de mikro-optimizasyon veya akıllı ama çirkin bir-liner kod üzerinden okunabilir kod tercih.

Ben senin ilk örnek vardı tek sorun o usul odaklı fonksiyonları kullanır, ben daha iyi OOP yazılabilir olacaktır (bu zincirleme ve okunması kolay kalmak olabilir gibi işlevleri çağırır).

Onun API esas usul ifadeleri kullanır gibi PHP, güçlü bir cepten amacı değil. Ama doğrusu onları birlikte çalışmaya almak için argümanlar bol fonksiyonları bir sürü olan daha iyi ayrılmış ve organisated, OO şekilde benim kod yazmayı tercih.

Tek satırda eveything yapmaya çalışıyor neden olabilir ki bir şey kodu varsayımlar olduğunu. Ben bunları tespit tutmak zorunda gerçekten sinir bozucu olarak değerlendirirsiniz Hangi. Bu nesne, zincirleme daha yaygındır. Örneğin

$object->getAnotherObject()->getAThirdObject()->doSomething();

Birçok insan okumak daha kolay olduğunu söyleyecektir; ancak her zaman bir nesne olmaktan her dönüşünde dayanır. Ben her birini döndürebilir ve tepkisini kontrol etmek için tercih ederler.

$secondObject = $object->getAnotherObject();
if ( is_object($secondObject) ) {
    $thirdObject = $secondObject->getAThirdObject();
    if ( is_object($thirdObject) ) {
        $thirdObject->doSomething();
    }
} 

Kesinlikle daha fazla tuş vuruşlarını alır, ama, ben yine de düşünmek, okumak daha kolay havaya uçurmak için daha az olacak ve.

O Boris Guéry ne yazdı tekrar değer rağmen. be consistent.