PHP 致命错误: 无法访问空属性

2022-08-30 09:13:02

我是新手,我已经执行了以下代码。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

答案 1

您以错误的方式访问该物业。使用语法,可以使用 $my_value 中的值的名称来设置属性。你想要的是$this->$my_value = ..$this->my_value = ..

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

与 相同

$this->my_value = "test";

为了修复示例中的一些问题,下面的代码是一个更好的 aproach

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'));

这可确保my_value在调用set_value时不会将其类型更改为字符串或其他内容。但是,您仍然可以将my_value直接的值,因为它是公开的。最后一步是,使my_value私有且仅通过 getter/setter 方法访问my_value


答案 2

首先,不要使用 var 声明变量,但

public $my_value;

然后,您可以使用以下命令访问它

$this->my_value;

而不是

$this->$my_value;

推荐