Home  >  Article  >  Backend Development  >  How to use bind() and bindTo() of PHP Closure class?

How to use bind() and bindTo() of PHP Closure class?

WBOY
WBOYOriginal
2016-10-17 09:30:131562browse

See the PHP manual for usage of Closure’s bind and bindTo. I really don't understand it and don't understand the concept.
For example, Closure::bind, the manual says "copy a closure and bind the specified $this object and class scope". How to understand this?
How are closures and $this bound together? What is class scope used for?
Also, one is a static version and the other is a dynamic version. What does this refer to?
Can you explain these concepts using the examples given?

<code><?php
class A {
    private static $sfoo = 1;
    private $ifoo = 2;
}
$cl1 = static function() {
    return A::$sfoo;
};
$cl2 = function() {
    return $this->ifoo;
};

$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
?></code>

Thank you

Reply content:

See the PHP manual for usage of Closure’s bind and bindTo. I really don't understand it and don't understand the concept.
For example, Closure::bind, the manual says "copy a closure and bind the specified $this object and class scope". How to understand this?
How are closures and $this bound together? What is class scope used for?
Also, one is a static version and the other is a dynamic version. What does this refer to?
Can you explain these concepts using the examples given?

<code><?php
class A {
    private static $sfoo = 1;
    private $ifoo = 2;
}
$cl1 = static function() {
    return A::$sfoo;
};
$cl2 = function() {
    return $this->ifoo;
};

$bcl1 = Closure::bind($cl1, null, 'A');
$bcl2 = Closure::bind($cl2, new A(), 'A');
echo $bcl1(), "\n";
echo $bcl2(), "\n";
?></code>

Thank you

I don’t know if you have ever used call or apply ​​in js, which is somewhat similar.

In fact, the closure is treated as a member method or static member method of the object.

<code class="php">Closure::bind($cl1, null, 'A'); //就相当于在类里面加了个静态成员方法
Closure::bind($cl2, new A(), 'A'); //相当于在类里面加了个成员方法</code>

Member methods use $this to access objects, and static member methods directly use classname::membermethod.
But because it is an anonymous function and has no function name, it returns a bound $this object and class function. The closure of the domain is for you to use.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:Ranking list issueNext article:Ranking list issue