我是新手php,我已经执行了以下代码。
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 = ..
$this->$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设为私有,并且仅通过getter / setter方法访问my_value