PHP: Bu sözdizimi argümanlar ile bir işlevi çağırmak için iyi mi?

6 Cevap

Sadece birden fazla argüman ile bir argüman olan bir işlev çağırarak herhangi bir sözdizimsel sorunlar var merak ediyorum. Örneğin:

function foobar( $biff ) {
// do stuff...
}

... Ve sonra işlevini çağırır:

echo foobar( 'Hello', 'world', '!!!' )

O $biff === 'Hello' inanıyor, değil mi?

Ve sonra ben array_slice( func_get_args(), 1 ); '!!!' args 'world' ile oynamak ve kullanacaktır.

Bu doğru da bu tavsiye edilmez?

P.S. Ben argümanlar çeşitli numaralarını içeren diğer fonksiyonları bir sürü tutan bir işlev mahfaza içine çalışıyorum.

6 Cevap

Daha iyi bir yaklaşım beklenen tüm argümanlarını tanımlamak olabilir ve isteğe bağlı argümanlar varsayılan bir değere sahip olurdu:

function foo($a, $b = '', $c = 1) { ... }

Bu şekilde çok daha belirgin bir işlev verilebilir hangi parametreler var.

Lütfen array_slice yaklaşım sadece (5.3 beri) yeni php sürümlerinde çalışacak

aksi takdirde kod iyi olduğunu, ama neden sadece fonksiyon prototip her üç params koymuyorsun?

Ben bu işe sanırım. PHP, bu nasıl çalıştığını açıklayan bir sayfa vardır fonksiyonları ile ilgili değişkin args tüm listeler ve bazı örnekler vardır: http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

Bu iş, ama diyor Pascal Martin @ gibi, onu manipüle önce bir değişkene func_get_args tarafından döndürülen argümanları atar. Bazı kod IDE yardımcı olsun, sadece PHPDoc gösterimde kullanabilirsiniz:

/**
 * This function takes $biff and does yadayadayada. Additionally, more arguments 
 * can be passed in and will be used to ...
 * @param string $biff This argument will ...
 * @param string [$foo] Optional. Any number of arguments can be passed in and ..
 * @return string The return value of this function is $biff and any other 
 * parameters ...
 */
function foobar( $biff ) {
// do stuff...
}

Bu yazım size kod Eclipse PDT, Zend Studio ve muhtemelen iyi birkaç diğerleri yardımcı verecektir.