Bir dizi vs bağlı işlev parametreleri parse_str kullanmanın bir avantajı var mı?

3 Cevap php

Ben bir WordPress blog için bazı değişiklikler yapmak oldu ve onlar parse_str (http://php.net/parse_str) ayrıştırma için ve bir işleve onların isteğe bağlı parametreleri ayarlayarak kullanmak fark.

Bir dizi gönderme üzerinde bu bir avantaj olup olmadığını merak ediyorum?

Örnekler:

Dizisi ile:

$blahOptions = array(
    'option_1' => true,
);
BlahArray($blahOptions);
function BlahArray($options = array()) {
    $defaults = array(
        'option_1' => false,
        'option_2' => 'blah',
    );
    // this would probably be in a function to be used everywhere
    foreach ($defaults as $defaultOption => $defaultValue) {
        if (!isset($options[$defaultOption])) $options[$defaultOption] = $defaultValue;
    }
}

Ile parse_str,

$blahOptions = 'option_1=1';
BlahString($blahOptions);
function BlahString($options = '') {
    $defaults = array(
        'option_1' => false,
        'option_2' => 'blah',
    );
    parse_str($options, $defaults);
    $options = $defaults;
}

3 Cevap

No Bu fonksiyonel parametre argümanların saçma bir yol gibi görünüyor. Eğer $ _GET veya $ _POST bu satırlar boyunca değişkenleri ya da bir şey yeniden, ama bir işleve parametre için gerekirse ben bunu anlayabilirdim? Oradaki kod koku var.

Onlar bir dizi kullanarak ve daha sonra yerine extract() kullanan olmalıdır. Ben daha önce Wordpress ile çalıştık, ve benim tavsiyem kol boyu kodu tutmaktır. Bu modeli programlama bir örnek değildir.

No avantajları daha fazla dezavantajları vardır.

Tek bir dize kullanarak olduğunuzda, sadece dize değerleri geçebilir. Bir dizi ile her PHP veri tipini kullanabilirsiniz ve her elemanın değer türü birbirinden bağımsız olduğunu.

Parse_str ile, potansiyel URL'den sorgu dizesinde bırakın, ve fonksiyon çalışacaktır. Eğer bir dizi kullanmak ve sorgu dizesi kullanmak istiyorsanız, işlevi çağırmadan önce bir diziye şeyi numaralandırmak gerekir.

Ben gitmek için en iyi yolu, tamamen ikna olmuş değilim, ama esneklik biraz ekleyebilirsiniz nasıl bakın.