在实例上下文中的 stdClass 实例中添加方法/函数以在 PHP 中使用$this?[复制]

add method/function in instance of stdClass in instance context for using $this in PHP? [duplicate]

提问人:Matrix 提问时间:7/14/2022 更新时间:7/14/2022 访问量:239

问:

这个问题在这里已经有答案了:
去年关闭。

社区去年审查了是否重新讨论这个问题,并关闭了它:

重复这个问题已经得到回答,不是唯一的,也没有与另一个问题区分开来。

如何为stdClass的实例对象添加函数?

$obj = (object)['name' => 'test', 'x' => 0];
$obj->move = function() { $this->x++; return $this->x; };
var_dump(($obj->move)());

我尝试使用闭包来模拟方法,还有另一种方法可以直接将函数动态添加到我的对象中?

举个例子,有一个错误:

致命错误:未捕获错误:不在对象上下文中使用$this

那么如何保持对象上下文,以便在我的闭包中使用呢?$this

我尝试添加但错误停留...(正常)use($obj)

那我该怎么办呢?

php 函数 闭包 stdclass php-8

评论

0赞 Barmar 7/14/2022
我不认为你能做到这一点。请参阅 stackoverflow.com/questions/12868066/...,了解如何在类中动态创建方法。
0赞 Manuel Guzman 7/14/2022
你不创建类有什么原因吗?
0赞 Matrix 7/14/2022
@ManuelGuzman是的,我把它放在我的示例中。我的数据一开始是一个数组,并且有一个强制转换(在实际情况下我无法更改它)object
1赞 gre_gor 7/14/2022
$obj->move = Closure::fromCallable(function() { $this->x++; return $this->x; })->bindTo($obj);
1赞 gre_gor 7/14/2022
也是不必要的。你可以做fromCallable$obj->move = (function() { $this->x++; return $this->x; })->bindTo($obj);

答: 暂无答案