如何将“$this”绑定到PHP函数?
对于JavaScript,我们可以这样做将作用域绑定到所需函数:如何将“$this”绑定到PHP函数?,php,oop,closures,Php,Oop,Closures,对于JavaScript,我们可以这样做将作用域绑定到所需函数: function myFunction() { alert(this.foo); } var MyClass = function() { this.foo = 1; }; var c = new MyClass(); myFunction.call(c); // `1` 我想用PHP做同样的事情。目前,我看到的成功工作是这样的,但这只适用于匿名函数: $my_function = function() {
function myFunction() {
alert(this.foo);
}
var MyClass = function() {
this.foo = 1;
};
var c = new MyClass();
myFunction.call(c); // `1`
我想用PHP做同样的事情。目前,我看到的成功工作是这样的,但这只适用于匿名函数:
$my_function = function() {
var_dump($this->foo);
};
class MyClass {
public $foo = 1;
};
$c = new MyClass();
Closure::bind($my_function, $c)();
// Or…
// $my_function->call($c);
这不起作用:
function my_function() {
var_dump($this->foo);
}
class MyClass {
public $foo = 1;
};
$c = new MyClass();
Closure::bind('my_function', $c)(); // :(
call_user_func([$c, 'my_function']); // :(
如果您遵循,则会变成:
<?php
$my_function = function() {
var_dump($this->foo);
};
class MyClass {
public $foo = 1;
}
$c = new MyClass();
$f = Closure::bind($my_function, $c);
$f();
如果您遵循,则会变成:
<?php
$my_function = function() {
var_dump($this->foo);
};
class MyClass {
public $foo = 1;
}
$c = new MyClass();
$f = Closure::bind($my_function, $c);
$f();
如果您使用的是PHP7.1+,则可以使用将任何可调用的PHP转换为闭包
(有关差异的一些信息,请参阅):
此时,您可以将对象实例添加到其中并执行:
Closure::bind($closure, $c)();
请参见如果您使用的是PHP7.1+,则可以使用将任何可调用的PHP转换为闭包
(有关差异的一些信息,请参见):
此时,您可以将对象实例添加到其中并执行:
Closure::bind($closure, $c)();
参见这可能有点离题,但问这样一个问题似乎合乎逻辑:为什么要尝试做同样的事情?PHP不是Javascript(对此我很高兴),你的问题没有多大意义。可能是因为你有问题X,你认为你可以用JavaScript解决方案Y来解决,但你不知道如何用PHP解决。这不起作用,因为Javascript!==PHP。那么,问一个X而不是Y的解决方案怎么样?@KIKOSoftware@steros所以我尝试在(比如)WordPress中创建一个PHP钩子函数,但是它总是缺少函数调用中的这个范围,除非我在函数参数中定义了它。我认为这更像是一种API风格,希望能够使用常见的OOP方法实现。当然,对于这样的事情。这可能有点离题,但问这样一个问题似乎是合乎逻辑的:为什么要尝试做同样的事情?PHP不是Javascript(对此我很高兴),你的问题没有多大意义。可能是因为你有问题X,你认为你可以用JavaScript解决方案Y来解决,但你不知道如何用PHP解决。这不起作用,因为Javascript!==PHP。那么,问一个X而不是Y的解决方案怎么样?@KIKOSoftware@steros所以我尝试在(比如)WordPress中创建一个PHP钩子函数,但是它总是缺少函数调用中的这个范围,除非我在函数参数中定义了它。我认为这更像是一种API风格,希望能够使用常见的OOP方法实现。当然,对于类似的事情。谢谢。它甚至可以在不检查输入是闭包还是函数的情况下使用匿名函数<代码>结束::fromCallable($my_函数)
谢谢。它甚至可以在不检查输入是闭包还是函数的情况下使用匿名函数<代码>闭包::fromCallable($my\u函数)