php - 类方法调用中的 php 闭包
问题描述
假设我有两个班级 Car 和 Owner
所有者.php =>
class Owner {
public $name;
public function setName($name) {
$this->name = $name;
}
}
分别是 car.php =>
class Car {
public $owner;
public function setOwner(Owner $owner) {
$this->owner = $owner;
}
}
要设置和调用方法,我通常使用这种方法 =>
$owner = new Owner;
$owner->setName('sam');
$car = new Car;
$car->setOwner($owner);
但是,如果我希望它使用像下面这样的 Closure 来做,我该如何相应地更改 setOwner 方法呢?
$car = new Car;
$car->setOwner(function(Owner $owner) {
$owner->setName('sam');
});
我想做的是类似于 Laravel 的东西where
User::where('car_id', $carId)
or
User::where(function($query) {
//code here
})
解决方案
Car::setOwner()
需要用一个Owner
对象调用它的参数。
class Car {
public function setOwner(Callable $ownerSetter) {
$o = new Owner;
$ownerSetter($o);
}
}
但这是使用闭包的一种奇怪方式。一个更好的例子可能是:
class Car {
private $owner;
public function setOwner($owner) {
$this->owner = $owner;
}
public function doSomethingToOwner(Callable $something) {
$something($this->owner);
}
}
$car->setOwner($owner);
$car->doSomethingToOwner(function($owner) {
echo $owner->name;
});
推荐阅读
- google-apps-script - 如何使用 `ScriptApp.getService().getUrl()` 在电子表格中正确显示“当前 Web 应用程序 URL”?
- r - $operator 和 atomic vector - 将我的 data.frame 代码放在哪里
- flutter - 被 Cubit Bloc 弄糊涂了,工作正常,但现在不行
- python - 使用 az cli 解密 Azure Key Vault 密码
- r - 在 dplyr 中将选定列一次转换为 R 中的整数
- javascript - 什么结构能让项目一目了然地知道什么需要单元测试,什么不需要?
- r - 如何从打印膏中编织输出
- c# - 添加 KeepFileOpen="true" 后 NLog 丢弃消息
- tensorflow - 在大文本上微调 GPT-2 以生成域文本
- c# - 当前任务调度程序是否流入 ThreadPool.QueueUserWorkItem 回调?