2010-04-06 19 views
6

Başka bir yöntemin içindeki bir dizide bir sınıf geri çağırma yöntemi kullanmam gerekir (geri arama işlevi sınıfa aittir).Sınıflar içinde geri arama yöntemleri nasıl uygulanır (PHP)

class Database { 

     public function escape_string_for_db($string){ 
      return mysql_real_escape_string($string); 
     } 

     public function escape_all_array($array){ 
      return array_map($array,"$this->escape_string_for_db"); 
     } 
} 

Bunun için doğru yol bu mu?

cevap

9

(I array_map geçirilen ikinci parametre açısından, ortalama) Sana array_filter istiyorum sanmıyorum ama array_map yine o

return array_map(array($this, 'escape_string_for_db'), $array); 

ama, sadece yanı

yapabilirsiniz Yüklemeyi karşılayamayan öğeleri siler.
return array_map('mysql_real_escape_string', $array); 
+0

Teşekkürler, iki kafası karıştı. – Gal

0

array_map mu demek istediniz? Daha sonra

function wrap_callback($target, $use_obj=false) 
{ 
    static $obj; 
    if ($use_obj) { 
    if (method_exists($target, 'callback')) { 
     $obj=$target; 
     return true; 
    } else { 
     trigger_error("callback declared for something with no callback method"); 
     return false; 
    } 
    } 
    return $obj->callback($target); 
} 

:

class Database { 

    public callback($string){ 
     return mysql_real_escape_string($string); 
    } 

    public function escape_all_array($array){ 
     wrap_callback($this, true); // register callback 
     return array_filter($array,"wrap_calback"); 
    } 
} 

C, alternatif olarak http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback

bkz bir sargı işlev yazma -

return array_map(array($this, "escape_string_for_db"), $array); 
-1

basit çözüm geri arama yöntemi geçmek olacaktır

+1

İhlal yok, ama bu aşırı karmaşık ve işlevlerde statik kullanmak kötü bir stil – Gordon

0

Bu işe yaramalı. Parametrenizin dize veya dizi olduğu aynı işlev hava durumunu kontrol edebilirsiniz.

class Database { 

    public function escape_string_for_db($data) 
    { 
    if(!is_array($data)) 
    { 
     $data =mysql_real_escape_string($data); 
    } 
    else 
    { 
     //Self call function 
     $data = array_map(array('Database ', 'escape_string_for_db'), $data); 
    } 
    return $data; 
    } 
İlgili konular