2010-08-12 16 views
10
$ çubuğu ayarlamak veya olmasaydı nasıl anlayabilirim, foo İçinde

PHP yöntemi/işlevinde isteğe bağlı parametrenin ayarlanıp ayarlanmadığını nasıl anlarsınız?

foo($bar = 0) 

:

aşağıdaki imzası ile bir yöntemi/fonksiyonu var varsayalım? isset $ çubuğu foo geçirilir olay hiçbir şey 0 atanır beri alway DOĞRU dönecektir.

0 denetleniyor bir seçenek değildir

. Ben parametresi açıkça 0'a ayarlamak veya 0'a

varsaymak olmak arasındaki farkı bilmek gerekir
+1

Bu, bir işlev için gerçekten kludgey bir yoldur. 'f (0)', '0' argümanının' kaynağından bağımsız olarak aynı sonucu üretmelidir. –

+0

Parametre ayarlanmışsa ve parametre ayarlanmamışsa başka bir şey yapan bir polimorfik yöntem oluşturmuyorsanız. – StackOverflowNewbie

+0

Frank, bazı fonksiyonlarda yerleşik olarak bunu yapıyorum, benim durumumda substr'i sarmam gerekiyordu, ve substra'ların substr için $ uzunluk varsayılan argümanını geçtiğimde, altstr, 0 uzunluğu olarak yorumladığı için hiçbir şeyim yok. Evet, delice kludgey, PHP'den daha iyi bir şey beklemeye geldim. –

cevap

13

varsaymak olmak arasındaki farkı bilmek gerekir.

<?php 
function foo($bar = 0) 
{ 
    echo "\nNumber of arguments: " . func_num_args(); 
} 

    // Outputs "Number of arguments: 1" 
foo(0); 

    // Outputs "Number of arguments: 0" 
foo(); 
?>  

Live example

9

Sen func_get_args'u kullanabilir. Örnek: İç PHP fonksiyonları için kullanılan kongre her zaman isteğe bağlı bağımsız değişkenler varsayılan bir değer vermek ve her iki argüman verilmez ve varsayılan değeri açıkça verildiğinde onları aynı davranışa sahip olması olduğunu

function foo($optional=null) { 
    if (count(func_get_args()) > 0) 
     echo "optional given\n"; 
    else 
     echo "optional not given\n"; 
} 

foo(); //optional not given 
foo(null); //optional given 

Not. Başka türlü bulursanız, bir hata raporu gönderin. if s almadan böyle bu edelim yapmanız şeyler:

function strpos_wrap($haystack, $needle, $offset = 0) { 
    return strpos($haystack, $needle, $offset); 
} 

Bu kongre daha uygulanır sizi göstermiştir Bu soruya yönlendirdi zorlanma gibi userland olduğunu. Sözleşme ihtiyaçlarınızı karşılamazsa, en azından yaklaşımınızı tekrar gözden geçirin. func_num_args/func_get_args'un amacı temel olarak değişken argüman fonksiyonlarına izin vermektir.

İlgili konular