Sınıfları içinde çağrı yöntemlerini uygulamak için nasıl (PHP)

4 Cevap php

Ben (geri çağırma işlevi sınıfa ait) başka bir yöntem içinde bir dizide bir sınıf geri arama yöntemi kullanmak gerekir.

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");
      }
}

Bu konuda gitmek için doğru yolu nedir? (I array_map geçirilen ikinci parametre açısından, ortalama)

4 Cevap

Ben size array_filter istiyorum düşünüyorum, ama array_map yok

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

ama sonra tekrar, sadece de yapabilirsiniz

return array_map('mysql_real_escape_string', $array);

array_filter yüklemi tatmin etmiyor elemanları siler. Ne demek istiyorsun array_map?

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

Bu çalışması gerekir. Eğer parametre dize veya dizi hava aynı işlevi 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;
  }

Basit çözüm olarak geri arama yöntemi geçmek olacaktır - bkz http://www.php.net/manual/en/language.pseudo-types.php#language.types.callback

Alternatif olarak, sarıcı fonksiyon yazmak:

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);
}

Daha sonra:

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.