PHP 「return $this->eventQueue[] = new Event($event, $params);」について

ショコラ
ショコラ

PHP 「return $this->eventQueue[] = new Event($event, $params);」について

livewire のソースをみていて、勉強になった箇所がありましたので紹介します。

PHP で親のコンポーネントに emit する時は以下のように書きます。
「$this->emit($eventName, …$params)->up()」

私は、emitメソッド では以下のようにオブジェクトを返すのかな思っていました。
「return $event」or「return new Event

しかし、実際その箇所を見てみると以下のようになっていました。
「return $this->eventQueue[] = new Event($event, $params);」

こんなに短く書けるのかと衝撃でした。
今までの私なら、

$event = new Event($event, $params);
$this->eventQueue[] = $event;
return $event
;

と無駄に3行書いてしまったと思います。

「return $this->eventQueue[];」はできないのですが、「= new Event($event, $params);」を追加することによって「追加した要素を返すことができる」というのがポイントです。

もっさん先輩
もっさん先輩

サンプルプログラムです。

<?php
class Event {
  public function __construct(public $event, public $params) {}
}

class ReceivesEvents {
  protected $eventQueue = [];
  public function emit($event, ...$params) {
    return $this->eventQueue[] = new Event($event, $params);
  }
}

$event = new ReceivesEvents;
$return =  $event->emit('create');
var_dump($return);

$array = [1,2,3,4,5];
$lst = $array[] = 6;
var_dump($lst);

サンプルプログラムの実行結果です。

# php a.php
object(Event)#2 (2) {
  ["event"]=>
  string(6) "create"
  ["params"]=>
  array(0) {
  }
}
int(6)

以上

Scroll to Top