PHP Indirect modification of overloaded property *** has no effect のエラーがでた

ショコラ
ショコラ

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])
}

以上

Scroll to Top