2010-12-02 18 views
5

için boş değerler eklemeBen bu yöntemi var bir diziye

:

$Class = new Search(); 

// Get parameters 
$ReflectionMethod = new \ReflectionMethod($Class, "search"); 
try { 
    foreach($ReflectionMethod->getParameters() AS $Parameter) { 
     if(array_key_exists($Parameter->name, $this->params)) { 
      $parameters[$Parameter->name] = $this->params[$Parameter->name]; 
    } elseif($Parameter->isDefaultValueAvailable()) { 
     $paramaters[$Parameter->name] = $Parameter->getDefaultValue(); 
    } else { 
      ... 
    } 
} catch(\Exception $e) { 
     ... 
} 
    // Call function 
return call_user_func_array(array($Class, "search"), $parameters); 

Benim $this->params bu içeriğe sahiptir

array 
    'paginationPage' => int 2 
    'id' => int 30 
    'searchKey' => string 'test' (length=4) 

$ özeti, $ başlık ve $ yazarları mevcut olmadığından,olan varsayılan değerlerini alırlar. bağımsız değişken null değeri atarken, bu şöyle bir $ parametreleri dizide hangi sonuçları atlanır: Böyle bir yöntem çağrısı neden

array 
    'searchKey' => string 'test' (length=4) 
    'paginationPage' => int 2 

:

public function search('test', 2, null, null, 0) { 
     ... 
} 

olması gerektiği iken be:

public function search('test', null, null, null, 2) { 
     ... 
} 

Umarız sorunu görürsünüz. Bu boş değerlerin de $parameters dizime dahil edildiğinden nasıl emin olabilirim. Geçersiz bir değer eklemek mümkün değildir, çünkü kullanıcı girişidir, böylece temelde her şey olabilir.

yöntem search Yukarıdaki örnekte düzenleme

kodlanmış olan. Ancak basitleştirilmiş şeylerden biri, search'un aslında bir değişkendir ve bu nedenle search herhangi bir şey olabilir. Bu, yöntemin parametrelerinin ne olduğunu bilmediğim ve foreach döngüsünden önce bunları önceden tanımlayamadığım anlamına gelir. Parametrelerin önceden tanımlanması çözümü aslında bu kodun yapması gereken şeydir.

+0

Ne demek istiyorsun * Bir diziye null değeri atarken atlanacak *? Bir diziye 'null 'eklediğimde, anahtar dizide bulunur: http://codepad.org/zIl0wArH –

+1

Bu sorunun bir yazım hatası olduğunu düşünüyorum. Bunu değiştirdim * Bir argümana * null değeri atarken *. – pts

cevap

0

... Aman Sadece basit yazım hatası oldu: üzerimde

... 
} elseif($Parameter->isDefaultValueAvailable()) { 
    $paramaters[$Parameter->name] = $Parameter->getDefaultValue(); 
} else { 
... 

Ayıp!

6

foreach döngü girmeden önce $parameters öncesi başlatılırken hakkında nasıl

$parameters = array(
    $searchKey => null, 
    $summary => null, 
    $title => null, 
    $authors => null, 
    $paginationPage => 0 
); 
İlgili konular