ショコラ
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)
以上