Kcko
11/1/2018 - 11:34 AM

Lamba & Closures

<?php

function getMultiplier($product)
{
	echo "kolikrat se spusti?"; // jen 1
	
    return function ($value) use ($product) {
        return $value * $product;
    };
}

// $multi23 je "násobička 23"
$multi23 = getMultiplier(23);
echo $multi23(1);
echo $multi23(2);
echo $multi23(3); 
echo $multi23(4);
<?php

class Dispatcher {
    //Added explicit callback declaration.
    var $callback;

    public function Dispatcher( $callback ){
         $this->callback = $callback;
    }

    public function asynchronous_method(){
       //do asynch stuff, like fwrite...then, fire callback.
       if ( isset( $this->callback ) ) {
            if (function_exists( $this->callback )) call_user_func( $this->callback, "File done!" );
        }
    }

}

d = new Dispatcher( 'do_callback' );
$d->asynchronous_method();

function do_callback( $data ){
   print 'Data is: ' .  $data .  "\n";
}
<?php

// This function uses a callback function. 
function doIt($callback) 
{ 
    $data = "this is my data";
    $callback($data); 
} 


// This is a sample callback function for doIt(). 
function myCallback($data) 
{ 
    print 'Data is: ' .  $data .  "\n"; 
} 


// Call doIt() and pass our sample callback function's name. 
doIt('myCallback');
<?php

function iWillReturnCallback($callBackHere){
    $data = array('title' => 'Romes', 'result' => 'OK');
	return $callBackHere($data);
}

function iAmCallBack($data){
	return '<b>'.$data['result'].'</b>';
}

echo iWillReturnCallback(function($data){
	return '<b>'.$data['result'].'</b>';
});


$luckyDip = array(
 
  function() {
    echo "You got a bag of toffees!";
  },
 
  function() {
    echo "You got a toy car!";
  },
 
  function() {
    echo "You got some balloons!";
  }
);

$choice = rand( 0, 2 );
$luckyDip[$choice]();
<?php


$people = array(
  array( "name" => "Fred", "age" => 39 ),
  array( "name" => "Sally", "age" => 23 ),
  array( "name" => "Mary", "age" => 46 )
);
 




function getSortFunction( $sortKey ) {
  return function( $personA, $personB ) use ( $sortKey ) {
    return ( $personA[$sortKey] < $personB[$sortKey] ) ? -1 : 1;
  };
}

// closures
 
echo "Sorted by name:<br><br>";
usort( $people, getSortFunction( "name" ) );
print_r( $people );
echo "<br>";
 
echo "Sorted by age:<br><br>";
usort( $people, getSortFunction( "age" ) );
print_r( $people );
echo "<br>";


// classic way
usort( $people, function( $personA, $personB ) {
  return ( $personA["age"] < $personB["age"] ) ? -1 : 1;
} );
<?php

class FileUpload
{
    function save($callback)
    {
        $path = '/path/image';
         
        echo "Data saved<br />";
        //call the callback
        $callback($path);
    }
}

class Profile
{
    function update_profile()
    {
        $f = new FileUpload('photo');
         
        // Note, this syntax is very similar to javascript callback syntax
    $f->save(function($path){
        echo "Image resized at path $path <br />";    
    });
     
    }
}
 
$p = new Profile;
$p->update_profile();