Daha okunabilir bir yaklaşımdır PHP Zend Framework standart kodlama,?

7 Cevap php

Bu öznel bir soru, ben senin hissediyor ve kodlama standartları hakkında düşüncelerini gerek, ve biçimlendirme uygulamalarıdır.

PHP Zend kodlama standardı böyle satırlı işlev çağrıları yazmak gerekir:

$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
);

Ben şu yaklaşım daha okunabilir olduğunu düşünüyorum:

$returnedValue = $object->longMethodName($argument1,
                                         $otherArgument,
                                         42);

Kendisin sol tarafta tek bir satır vardır, bu sadece bir ifadedir gösterir ve argümanlar yöntem adı yakınız.

YOU Hangisini tercih edersiniz?

7 Cevap

The second approach leaves you with one additional Problem: Line length. The Zend Coding Standard suggest that "The maximum length of any line of PHP code is 120 characters."

Bu iyi (uzun, açıklayıcı) Değişkenler isimleri istiyorum ve dönüş değeri, bir nesne, bir iyi adında fonksiyon ve uzun bir parametre için bir tane ne varsa çok daha fazla vurmak için olasılıkla bu 120 karakter sınırı vardır demektir.

Bu ekleme ve maksimum uzunluğu arasında sadece 80 Karakter falan çekebilir standardına bağlı.

Ayrıca ben daha iyi ilki gibi tekrar tekrar kullanılırsa

$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
);
$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
);
$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
);
$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
);

$returnedValue = $object->longMethodName($argument1,
                                         $otherArgument,
                                         42);
$returnedValue = $object->longMethodName($argument1,
                                         $otherArgument,
                                         42);
$returnedValue = $object->longMethodName($argument1,
                                         $otherArgument,
                                         42);
$returnedValue = $object->longMethodName($argument1,
                                         $otherArgument,
                                         42);

Pekka Dediğim gibi, daha az göz atlama.

Ben daha ilk yaklaşım gibi. İkincisi daha yazarak gerektirir, ve daha IMO göze ıkınma. Geçerli birinin sonunda gelen bir sonraki satırın başlangıcına atlamak için eğilimindedir ve çok fazla boşluk var - soldan sağa insanlık bölümü okumaya, en azından, "Batı" için - Ben gözü düşünüyorum İkinci örnekte üzerinden atlamak. Bu anlamsal% 100 doğru olabilir ama iyi bir okuma akışını sağlar olmayabilir.

Ben PEAR'ın standart gibi ve bu örnekler ilk savunucuları

$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
);

ama yerine parametreleri gibi kısa bir dizi için bu yapmış olabilir:

$returnedValue = $object->longMethodName(
    $argument1, $otherArgument, 42
);

EDIT: oh! ve yıldızlara ait örneğin:

$notInlined = longInlinedMethod($argFoo, $argBar) + otherLongInlinedMethod();
$returnedValue = $object->longMethodName(
    $arg1, $notInlined, $arg3, $arg4
);
while ($val) {
    someStatement();
}

Verdiğiniz iki ki, ben ilk tercih.

Yerinde bir kodlama standart varsa, bunu takip edecek. Ancak, benim iş de yok, ve ben aşağıdaki tercihim:

$returnedValue = $object->longMethodName(
                                $argument1,
                                $otherArgument,
                                42
                            );

Benim için, çünkü parametreleri ve parantez kapatma girintili şekilde yapılıyor bir değişken atama (. Zend standardı ile, aslında başka bir atama olduğunu görmek için oturum eşittir bakmak zorunda var olduğunu hemen görmek kolay Bir düz satırlı işlev çağrısı ile karışabilir.

Onlar fazla 120 karakter Workspace tarayıcısı ve Code Navigator bölmeleri açık ile 1600x1200 çözünürlükte benim IDE görünür olmayacaktır 120 karakter şey aşarsa bir açıklama daha ... benim işlevi sadece haline çok satırlı çağırır.

Bu kod satırı, sadece 74 karakter olduğunu, bu yüzden bu yapardı:

class myClass
{
    public function myFunction(...)
    {
        $returnedValue = $object->longMethodName($argument1, $otherArgument, 42);
    }
}

Ne? Tek girinti kod blokları için kullanılır, çünkü Seçenek A potansiyel kafa karıştırıcı. B Seçeneği uzun argüman isimleri ve / veya derin girintili kodu ile sorunludur.

Ben sürekli argüman listeleri için çift girintilemeyi tercih.

Örnek, erenon isteğine göre:

$returnedValue = $object->longMethodName(
        $arg1, longInlinedMethod($argFoo, $argBar) + otherLongInlinedMethod(),
        $arg2, $arg3);
while ($val) {
    someStatement();
}

Ben genellikle kapanış aynı hat üzerinde dirsek ya da yukarıdaki gibi, en azından aynı girinti ile Birinci ile gitmek, ama.

$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42
    );

$returnedValue = $object->longMethodName(
    $argument1,
    $otherArgument,
    42);

Bu yerleştirme sırasında benim için, seviye karışıklığı önlemek gibi görünüyor.

Ancak: vim benim indenter (yukarıdaki 2) aynı seviye-olarak-paren yapmaya başladı ve ben bunu seviyorum. Ben sarma yardıma ihtiyacım uzun hatlarda onunla kırmak, ama genel olarak, ben öncelikle yerine parametreleri yöntem adları için taradığınız eğer okunabilir kod yol açan düşünüyorum.

BTW, iyi de iç içe Boole ifadeleri ve bu tür işler için indenting bu tür yapıyor.

Ben olacak aynı zamanda bir hat üzerinde grup argümanlar onlar çok uzun değil ve onlar çeşit grup mantıklı eğer.

Ben iki nedenden dolayı ilk tercihim:

  1. Bu sizin argümanlar sıraya yapmak için ek alanlar ekleme konusunda hiçbir endişe ile, girinti (veya girinti / Unindent için kısayol tuşları) için Tab tuşunu kullanmak için izin verir.
  2. Daha da önemlisi, size argüman girinti değiştirmek zorunda yoksa ilk satırda değişken, nesne veya yöntem adı değişiklikleri uzunluğu.