Bir fonksiyona başka bir fonksiyonu parametre olarak vermek (Çağrılabilir - Callable - call_user_func_array fonksiyonu)

bir-fonksiyona-baska-bir-fonksiyonu-parametre-olarak-vermek-cagrilabilir-callable-call-user-func-array-fonksiyonu (büyük resim için tıklayın)

call_user_func_array fonksiyonuna verilen parametreler neticesinde bir fonksiyonun başka bir fonksiyona parametre olarak belirtimi(çağırımı, callable) ile işlem gerçekleştirilebilir. Örneğin;

Cipher isminde sınıf ve bu sınıf içerisinde cipher isminde parametre olarak dizi ve limit parametrelerini alan, geriye string return eden fonksiyon bulunsun.

  • public function cipher(array $baseArr,int $limit=self::LIMIT):string
  • {
    • $secret="";
    • for($i=0;$i<$limit;$i++){
      • $randChar=array_rand($baseArr,1);
      • $secret.=$baseArr[$randChar];
    • }
    • return $secret;
  • }

cipher fonksiyonunda; baseArr parametre dizisi içerisinden limit parametresine kadar döngü ile rastgele 1 adet eleman seçilip değişkene eklenecek ve değişken son olarak return edilecek.

Yine bu sınıf içerisinde looper isminde bir fonksiyon olsun.  Bu fonksiyonda yapmak istediğim şu; cipher fonksiyonunu looper fonksiyonunda verdiğim parametre kadar döngüye al ve her döngüdeki cipher fonksiyonundan return edilen değeri looper fonksiyonunda tanımladığım diziye aktar ve son olarak bu diziyi return et. Kodlayalım !

  • public function looper(int $limit, array $arr):array{
    • $myarr=array();
    • for($i=0;$i<$limit;$i++){
      • array_push($myarr,call_user_func_array(array($this,'cipher'),array($arr)));
    • }
    • return $myarr;
  • }

looper fonksiyonu içerisindeki kilit nokta, call_user_func_array fonksiyonu. Bu fonksiyon ile class içerisindeki fonksiyonu (metod) çağırmak için, ilk array parametresinde; this ile sınıfı işaret edip cipher ile sınıf içerisindeki fonksiyonu belirtiyorum, son array parametresinde ise cipher fonksiyonuna göndereceğim aynı zamanda looper fonksiyonuna parametre olarak gelen değişkeni($arr) veriyorum. Kullanalım !

  • $cip=new Cipher();
  • $arr=$cip->delSpesific($cip->getAll(),array("0","A","a","X","x","[","]","#","!"));
  • print_r($cip->looper(23,$arr));

Cipher sınıfına erişmek için tıklayın.

omurserdarr

Ömürcan Serdar, 30 Ağustos 2018 Perşembe 15:30 tarihinde kayıt oldu

Etiketler

Beğeni

Toplam Beğeni Sayısı: 2