Php замыкание в вызове метода класса - PullRequest
0 голосов
/ 25 января 2020

Допустим, у меня есть два класса Автомобиль и Владелец

владелец. php =>

class Owner {
  public $name;

  public function setName($name) {
    $this->name = $name;
  }
}

и соответственно автомобиль. 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 
})

1 Ответ

1 голос
/ 25 января 2020

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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...