PHPのエラー『Notice: Indirect Modification of Overloaded Property』の解決方法

  • 作成日 2025.06.08
  • php
PHPのエラー『Notice: Indirect Modification of Overloaded Property』の解決方法

PHPで開発中に『Notice: Indirect Modification of Overloaded Property』というエラーが発生することがあります。このエラーは、マジックメソッド(`__get`や`__set`など)で定義されたプロパティを直接変更しようとした場合に発生します。この記事では、このエラーの原因と解決方法について詳しく説明します。

エラーの発生条件

『Notice: Indirect Modification of Overloaded Property』は、マジックメソッドで定義されたプロパティを直接変更しようとした場合に発生します。このエラーは、主に以下のような状況で発生します。

1. マジックメソッド`__get`で定義されたプロパティを直接変更しようとした場合

マジックメソッド`__get`で定義されたプロパティを直接変更しようとした場合、このエラーが発生します。

<?php
class MyClass {
    private $data = [];

    public function __get($name) {
        return $this->data[$name];
    }

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

$obj = new MyClass();
$obj->property[] = 'value'; // Notice: Indirect modification of overloaded property MyClass::$property has no effect
?>

2. マジックメソッド`__set`で定義されたプロパティを直接変更しようとした場合

マジックメソッド`__set`で定義されたプロパティを直接変更しようとした場合、このエラーが発生します。

<?php
class MyClass {
    private $data = [];

    public function __get($name) {
        return $this->data[$name];
    }

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
}

$obj = new MyClass();
$obj->property[] = 'value'; // Notice: Indirect modification of overloaded property MyClass::$property has no effect
?>

これらの例を見てわかるように、『Notice: Indirect Modification of Overloaded Property』は、主にマジックメソッドで定義されたプロパティを直接変更しようとした場合に発生します。マジックメソッドを正しく使用することで、このエラーを解決することができます。