İşlev bildirimini aşağıdaki gibi değiştirmeyi öneriyorum, böylece istediğinizi yapabilirsiniz:
function foo($blah, $x = null, $y = null) {
if (null === $x) {
$x = "some value";
}
if (null === $y) {
$y = "some other value";
}
code here!
}
Bu şekilde, foo('blah', null, 'non-default y value');ikinci parametrenin $xhala varsayılan değerini aldığı yerlerde istediğiniz gibi bir arama yapabilir ve istediğiniz gibi çalışmasını sağlayabilirsiniz .
Bu yöntemle, boş bir değer iletilmesi, bir parametrenin ardından gelen bir parametrenin varsayılan değerini geçersiz kılmak istediğinizde bir parametre için varsayılan değerin olmasını istediğiniz anlamına gelir.
Diğer cevaplarda belirtildiği gibi,
varsayılan parametreler yalnızca işleve son argümanlar olarak çalışır. İşlev tanımındaki varsayılan değerleri bildirmek isterseniz, bir parametreyi atlamanın ve ardından bir parametreyi geçersiz kılmanın bir yolu yoktur.
Değişken sayıda parametreyi ve değişken tipteki parametreleri kabul edebilecek bir yöntemim varsa, genellikle Ryan P tarafından gösterilen cevaba benzer işlevi beyan ederim.
İşte başka bir örnek (bu, sorunuza cevap vermiyor, ancak umarım bilgilendirici:
public function __construct($params = null)
{
if ($params instanceof SOMETHING) {
// single parameter, of object type SOMETHING
} else if (is_string($params)) {
// single argument given as string
} else if (is_array($params)) {
// params could be an array of properties like array('x' => 'x1', 'y' => 'y1')
} else if (func_num_args() == 3) {
$args = func_get_args();
// 3 parameters passed
} else if (func_num_args() == 5) {
$args = func_get_args();
// 5 parameters passed
} else {
throw new InvalidArgumentException("Could not figure out parameters!");
}
}