I'm new to php and I have executed below code. 
<?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; }  ?>   I got below errors. What could be the error?
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 
                You access the property in the wrong way. With the $this->$my_value = .. syntax, you set the property with the name of the value in $my_value. What you want is $this->my_value = ..
$var = "my_value"; $this->$var = "test";   is the same as
$this->my_value = "test";   To fix a few things from your example, the code below is a better 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'));   This ensures, that my_value won't change it's type to string or something else when you call set_value. But you can still set the value of my_value direct, because it's public. The final step is, to make my_value private and only access my_value over getter/setter methods
First, don't declare variables using var, but
public $my_value;   Then you can access it using
$this->my_value;   and not
$this->$my_value; 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With