gpt4 book ai didi

php - PHP 中的 Lambda 函数不符合逻辑

转载 作者:行者123 更新时间:2023-12-02 01:07:22 26 4
gpt4 key购买 nike

Note: I have condensed this article into my person wiki: http://wiki.chacha102.com/Lambda - Enjoy

我在使用 PHP 中的 Lambda 样式函数时遇到一些问题。

首先,这有效:

$foo = function(){ echo "bar"; };
$foo();

第二,这有效:

class Bar{
public function foo(){
echo "Bar";
}

第三,这有效:

$foo = new stdClass;
$foo->bar = function(){ echo "bar"; };
$test = $foo->bar;
$test();

但是,这不起作用:

$foo = new stdClass;
$foo->bar = function(){ echo "bar"; };
$foo->bar();

而且,这不起作用

class Bar{
public function foo(){
echo "Bar";
}
$foo = new Bar;
$foo->foo = function(){ echo "foo"; };
$foo->foo(); // echo's bar instead of Foo.

我的问题是为什么?,以及我如何确保:

$foo->bar = function(){ echo "test"; };
$foo->bar();

还有这个

$foo = new Bar;
$foo->bar();

是否正确调用?如果您能指出说明此问题发生原因的文档,则可加分。

最佳答案

这是一个有趣的问题。这有效:

$a = new stdClass;
$a->foo = function() { echo "bar"; };
$b = $a->foo;
$b(); // echos bars

但正如你所说,这并不:

$a = new stdClass;
$a->foo = function() { echo "bar"; };
$a->foo();

如果您想要一个可以动态调用成员的对象,请尝试:

class A {
public function __call($func, $args) {
$f = $this->$func;
if (is_callable($f)) {
return call_user_func_array($f, $args);
}
}
}

$a = new A;
$a->foo = function() { echo "bar\n"; };
$a->foo2 = function($args) { print_r($args); };
$a->foo();
$a->foo2(array(1 => 2, 3 => 4));

但是您不能以这种方式替换可调用方法,因为 __call() 只会为不存在或不可访问的方法调用(例如,它们是私有(private)的)。

关于php - PHP 中的 Lambda 函数不符合逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2080248/

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