How to bind make Currying with PHP? (like Function.prototype.bind do in javascript)?

javascript bind
javascript bind parameters to callback function
bind javascript w3schools
difference between call, apply and bind javascript
this bind this
javascript apply
prototype in javascript
use of call and apply in javascript

i want in PHP:

$x = function ($a, $b) {
  echo $a . ' ' . $b;

for ($i= 0;$i< 10;$i++) {
  $y = bind($x, $i)// how?

Actual currying is maybe a bit of a stretch for PHP (;-)), nonetheless you can do stuff like this with Closures in PHP 5.3+:

function populatedList() {
    $args = func_get_args();
    return function () use ($args) {
        $localArgs = func_get_args();
        return array_merge($args, $localArgs);

$sevenList = populatedList(7, 14, 21);

var_dump($sevenList('foo', 'bar', 'baz'));

// Array
// (
//    [0] => 7
//    [1] => 14
//    [2] => 21
//    [3] => foo
//    [4] => bar
//    [5] => baz
// )

JavaScript's Apply, Call, and Bind Methods are Essential for , In JavaScript, we can pass functions around, return them, borrow them, and the like. And the bind  Thus, presented below are two options for Function.prototype.bind() polyfills: The first one is much smaller and more performant, but does not work when using the new operator. The second one is bigger and less performant, but it permits some usage of the new operator on bound functions.

Perhaps Anonymous functions are what you are looking for?


    $greet = function($name)
        printf("Hello %s\r\n", $name);


How to use the apply(?), call(?), and bind( ) methods in JavaScript, To learn about apply|call|bind we need to know about functions in JavaScript Calling the constructor directly can create functions dynamically, which can be The following are the methods in the function prototype chain: Array-like objects may refer to NodeList or the arguments object inside a function. ap. Function.prototype.bind sets this which is super annoying if you just want to do currying over arguments while passing this through.. Instead you can do:

The functional-php library has a class for currying (from the Docs):

Since PHP allows for optional parameters, you can decide if you want to curry them or not. The default is to not curry them.

use function Functional\curry;

function add($a, $b, $c = 10) {
    return $a + $b + $c;

// Curry only required parameters, the default, $c will always be 10
$curriedAdd = curry('add', true);

// This time, 3 parameters will be curried.
$curriedAddWithOptional = curry('add', false);

Starting with PHP7 and the implementation of the "Uniform variable syntax", you can greatly simpliy the usage of curried functions.

use function Functional\curry;

function add($a, $b, $c, $d) {
    return $a + $b + $c + $d;

$curriedAdd = curry('add');
$curriedAdd(10)(5)(27)(10); // -> 52

Getting Out of Binding Situations in JavaScript – A List Apart, (And that is about as far as I'm willing to put PHP and JavaScript in the same basket.) This is a very common mistake, and makes up a fair share of the questions on the Prototype has long equipped functions with a bind method that lets you do curry —it preserves the current binding and focuses on argument pre-filling: JavaScript has functional capabilities, but currying isn’t built in by default (at least not in current versions of the language). But we already know some functional tricks, and we can make

Since php5.3 you can use the "use" keyword to pass the curried argument to the scope of the returned function:

$add = function ($a) {
    return function ($b) use ($a) {
        return $b + $a;

var_dump($add(2)(3)); // int (5)

Function.prototype.bind, I still need to spec Function.prototype.bind in our funny spec language. However, even the ES3 spec does make some use of self-hosting language such as "as if by may have been overridden (or at least, I don't know of any way to do it). same as Function.prototype.apply, unless you set the javascript version to 1.7? How to build a curry function in javascript that takes function as an argument. IN this tutorial we will understand what currying means, - We will build a simple curry function to add two number

What is the role of the this variable when it comes to - javascript, The this variable that you are providing to .bind() is the context. For what it's worth, you can do currying without relying upon Function.prototype.bind Once you stop it fixes 3 as the first argument, the arguments of the new function will be that function sayHello() You can make partial functions with bind: function add(a,  Function binding is probably your least concern when beginning with JavaScript, but when you realize that you need a solution to the problem of how to keep the context of “this” within another function, then you might not realize that what you actually need is Function.prototype.bind().

JavaScript bind, currying and arrow functions, JavaScript bind, currying and arrow functions As we remember from last time we can get this: Now we'll create a curry function: args = Array.prototype.slice​.call(arguments, 1); return fn.bind.apply(fn, [this].concat(args); };. When you can use arrow functions, I suggest you do, as they make reading the code a lot simpler for others. When you can't, there's always the trusty .bind() Wrapping up .bind is an essential tool in the JavaScript developer's toolbox. Understanding how (and when) to use it is vital to being able to write effective JavaScript.

A native syntax alternative for `Function.prototype.bind`? This is an , The main problem I'm trying to solve with `Function.prototype.bind()` is that it creates a new function This means if you do that a lot, you're creating (and throwing away… Dynamic 'this' is one of the joys of JavaScript and making call/​apply impotent in some I think of variables and references in JS as keys in an object. Currying means first few arguments of a function is pre-processed and a function is returned. The returning function can add more arguments to the curried function. It's like if you have given one or two spice to the curry and cooked little bit, still you can add further spice to it. A simple example will look like-