Neden yapılandırma diziler PHP ve JavaScript kabul parametreler nelerdir?

7 Cevap php

Diğer çoğu Object Oriented dillerde. her işlevi yerine yöntem imzası her sıralandıran daha nesneleri tek bir ilişkisel dizi almak zorunda saygısızlık olurdu. Neden olsa, kabul edilebilir ve genellikle bunu yapmak için bu dillerin her ikisi için en popüler çerçeveler kullanılır?

Özlü yöntem imzaları var isteyen ötesinde bazı gerekçe var mı?

Ben bu bir fayda görüyorum - API yeni olarak değişmeden kalır ki, isteğe bağlı parametreler eklenir. Ama Javascript ve PHP zaten onların yöntemi imzalar isteğe bağlı parametreler için izin verir. Eğer bir şey, Java gibi görünüyor ya da başka OO bir dil bu daha yararlı olacaktır ... ve henüz ben orada nadiren bu desen bakın.

Ne verir?

7 Cevap

Önemli nedeni bu belirli dilleri sadece aynı fonksiyon adı için birden çok arama kuralları olmasını desteklemek kalmamasıdır. I.E. Eğer aşağıdaki işlemleri yapamaz:

public function someFunc(SomeClass $some);
public function someFunc(AnotherClass $another);
public function someFunc(SomeClass $some, AnotherClass $another);

Bu sadece uygun bir yoldur çünkü Yani biz someFunc(array('some'=>$some, 'another'=>$another)) ile sona PHP, etrafında değişkenleri geçmek için basit yolları oluşturmak için başka bir yol bulmak zorundadır. JavaScript biz kötü değil nesneleri kullanarak sonuna kadar: someFunc({some: something, another: anotherthing})

Benim düşünceme göre, bu fonksiyonların bir sürü üzerinde 10, onlar kabul argümanların sayısı tırmanıyor nadir değildir. Eğer isteğe bağlı parametreleri bile, yine sırayla onları göndermek zorunda.

Gibi bir işlevi göz önünde bulundurun:

function myFunc(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13){
    //...
}

Eğer argümanları 3 ve 11 yalnızca kullanmak istediğiniz söyleyin. İşte kod:

myFunc(null, null, null, 'hello', null, null, null, null, null, null, null, 'world');

Olmaz sen değil sadece:

myFunc({
    a3 : 'hello', 
    a11 : 'world' 
});

?

Bu nedenleri bir çift vardır.

İlk değil, tüm argüman listeleri doğal bir düzen olması. Sadece 1 ve 6. argüman kaynağı bir kullanım durum varsa, şimdi dört varsayılan tutucuların doldurmak zorunda. Jage de bunu göstermektedir.

İkinci sizin argüman olarak bir dizi rakam alırsak argümanları içeri gerçekleşmesi gerekir sırasını hatırlamak çok zor olduğunu, bu sayı ne demek olduğunu bilmek olası değildir. imagecopyresampled($dest, $src, 0, 10, 0, 20, 100, 50, 30, 80) örnek olarak alın. Bu durumda, yapılandırma dizi Python adında bağımsız gibi davranır.

Ruby de bu metodolojiyi takip ve hatta Ruby 1.9 olarak, özellikle başlatıcı olarak sağlamalarının kullanarak yöneliktir daha özlü bir sözdizimi geliştirmiştir:

# old syntax
myFunc(:user => 'john', :password => 'password');

# new syntax
myFunc(user: 'john', password: 'password');

Ele alınan sorun bu gibi dillerde içinde, argüman tipine göre fonksiyonları aşırı olamaz olmasıdır. Bu büyük ve hantal argüman listesi tek bir kurucu ile karmaşık sınıfların sonuçları. Parametrelerini sağlamak için karma gibi nesneleri kullanarak yerine türüne göre çok parametre adıyla sözde aşırı yüklenme bir çeşit sağlar.

My only real problem with this practice is it becomes difficult to document your arguments: http://stackoverflow.com/questions/2009122/phpdoc-for-variable-length-arrays-of-arguments

Diğer OO dillerde bu görmüyorum neden en önemli sebeplerinden biri muhtemelen C + + veya Java gibi derlenen dillere atıfta olmasıdır.

Derleyici, aramak istediğiniz ve bu normalde imza dayalı yapılır yöntemi yürütme sırasında, bu nedenle temelde bu şekilde yapılması gerekiyor değil derleme zamanında belirlemek için sorumludur. Bu yöntem aşırı bu dillerde nasıl yapılır aynı zamanda.

Tüm bu tekniğin Üretim kodlayıcıları için çok basittir.

Bunlar uygulamada tüm fonksiyonların bütün parametrelerin sırasını hatırlamak gerekmez. Kodu daha okunabilir ve daha güçlü hale gelir.

Herhangi bir gelecekteki gelişimi, iyileştirmeler veya üstlenmeden sağlamak için bir o kadar zor olacaktır. Kod daha rahat olur.

Ancak bazı tuzaklar var. Örneğin, her IDE size fonksiyonlar ve bunların parametreleri ile tamamlayarak basit bir kod verecektir.

Bence 2 nedenleri bu var gelişti:

  1. Array en hatta karışık türleri ile, yaratmak ve işlemek için çok kolaydır.
  2. PHP / JS programcılar genellikle olmayan bir akademik geçmişe sahip ve daha az Java ve C + + gibi languanges gelen aşılandığını.