gpt4 book ai didi

php - 将对象实例绑定(bind)到静态闭包

转载 作者:可可西里 更新时间:2023-11-01 12:37:38 26 4
gpt4 key购买 nike

是否可以将实例绑定(bind)到静态闭包,或者在静态类方法内部创建非静态闭包?

这就是我的意思...

<?php
class TestClass {
public static function testMethod() {
$testInstance = new TestClass();
$testClosure = function() use ($testInstance) {
return $this === $testInstance;
};

$bindedTestClosure = $testClosure->bindTo($testInstance);

call_user_func($bindedTestClosure);
// should be true
}
}

TestClass::testMethod();

最佳答案

PHP 始终将父 thisscope 绑定(bind)到新创建的闭包。静态闭包和非静态闭包之间的区别在于,静态闭包在创建时作用域 (!= NULL) 但没有this >。“顶级”闭包既没有 this 也没有 scope

因此,在创建闭包时必须摆脱作用域。幸运的是 bindTo 允许这样做,即使对于静态闭包也是如此:

$m=(new ReflectionMethod('TestClass','testMethod'))->getClosure()->bindTo(null,null);
$m();

关于php - 将对象实例绑定(bind)到静态闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16863081/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com