1. ホーム
  2. php

[解決済み] PHP Fatal error: 空のプロパティにアクセスできません

2022-02-06 13:52:31

質問

を初めて利用します。 php で、以下のコードを実行しました。

<?php
class my_class{

    var $my_value = array();
    function my_class ($value){
        $this->my_value[] = $value;
    }
    function set_value ($value){
    // Error occurred from here as Undefined variable: my_value
        $this->$my_value = $value;

    }

}

$a = new my_class ('a');
$a->my_value[] = 'b';
$a->set_value ('c');
$a->my_class('d');

foreach ($a->my_value as &$value) {
    echo $value;
}

?>

以下のようなエラーが発生しました。どのようなエラーなのでしょうか?

Notice: Undefined variable: my_value in C:\xampp\htdocs\MyTestPages\f.php on line 15

Fatal error: Cannot access empty property in C:\xampp\htdocs\MyTestPages\f.php on line 15

解決方法は?

間違った方法でプロパティにアクセスしている。この場合 $this->$my_value = .. 構文では、$my_valueに値の名前を付けてプロパティを設定します。必要なのは $this->my_value = ..

$var = "my_value";
$this->$var = "test";

と同じです。

$this->my_value = "test";

あなたの例からいくつかの点を修正するために、以下のコードはより良いアプローチです。

class my_class {

    public  $my_value = array();

    function __construct ($value) {
        $this->my_value[] = $value;
    }

    function set_value ($value) {
        if (!is_array($value)) {
            throw new Exception("Illegal argument");
        }

        $this->my_value = $value;
    }

    function add_value($value) {
        $this->my_value = $value;
    }
}

$a = new my_class ('a');
$a->my_value[] = 'b';
$a->add_value('c');
$a->set_value(array('d'));

これにより、set_value を呼び出したときに my_value の型が文字列や他のものに変更されないことが保証されます。しかし、my_valueはパブリックなので、直接値を設定することができます。最後のステップは、my_value をプライベートにして、ゲッター/セッターメソッドでのみ my_value にアクセスするようにすることです。