ショコラ
PHP Indirect modification of overloaded property *** has no effect のエラーがでた
これは、__get のマジックメソッドを使って値を設定する時にでるエラーです。
ArrayObject を使って回避できそうです。
もっさん先輩
問題の箇所は、modal2 を __getマジックメソッド で取得している箇所で、array(‘modal2’=>[‘feedback’=>”]) の feedback に値を設定しようとしたところでエラーが発生しました。
public function test(LiveData $data) {
// modal2 を __getマジックメソッド で取得している
$data->modal2['feedback'] = $this->feedback;
}
LiveDataクラス の __getマジックメソッド の箇所です。
public function __get( mixed $key ):mixed {
return $this->array[$key];
}
おそらく以下のようにすれば直ると思いますが、「1行で書けるようなことを、わざわざ3行も使って書くか」と
public function test(LiveData $data) {
$modal2 = $data->modal2;
$mdail2['feedback'] = $this->feedback;
$data->modal2 = $mdail2;
}
解決策は、__getマジックメソッド で ArrayObject を返すようにします。こうすれば配列形式で値の設定ができるようになります。
public function __get( mixed $key ):mixed {
return new \ArrayObject($this->array[$key])
}
以上