それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpでprotectedなメソッドにアクセスする。

phpでprotectedなメソッドにアクセスする。

この様なときに使う必要があった、laravelが持ってる protected な プロパティに強引にアクセスする。

laravelなどのフレームワークが内部に持ってるコールバックやプロパティを取り出して調べたり、意図通り、正しく内部登録されれてるかテストしたい。

しかし、内部へのアクセスは基本的に出来ない。

コールバック内部では、php の this を固定できるという事案を使ってハックする。

<?php
(fn()=> $this->protected )->call($ev);

たとえば、こんな感じ。

<?php
$eventObjects = ... 
$ev = $eventObjects[0];
$prop = (function(){return $this->callback;})->call($ev);
$deep_prop = (function(){return $this->entry;})->call($prop);

php/laravel がContractでFacadeから呼び出している実体クラスがあって、そいつが持ってる値を調べたいときに使う。