Salve, mi sto cimentando con la programmazione a oggetti applicata a PHP, tutto procede abbastanza bene, ma mi sono piantato nel tentativo di agire sui traits.
Ho questo codice
Codice PHP:
<?php    trait MyTrait {        // Proprietà, non ridefinibili nelle classi        public $var1 = "A";        protected $var2;        private $var3;        // Metodi, ridefinibili nelle classi        public function function1() {            echo "function 1"."<br />";        }        protected function function2() {            echo "function 2"."<br />";        }        private function function3() {            echo "function 3"."<br />";        }        public static function function4() {            echo "function 4"."<br />";        }        abstract function function5();        public function setVar3($v) {            $this->v;            echo $var3;        }    }    class MyClass {        use MyTrait;        public function impostaVar($var) {            $this->setVar3($var);        }        public function function5() {            echo "function 5 ", $this->var1;        }    }    $myClass = new MyClass();    $myClass->function1(); // output => 'function 1'    $myClass->impostaVar("B");    echo $myClass->var1;   // output => 'A'    echo $myClass->var3;   // errore?>
L'obiettivo sarebbe quello di riuscire a stampare "B" agendo sulla variabile privata del trait $var3 tramite il metodo impostaVar() della classe, che al suo interno accede al metodo pubblico setVar3() del trait.
L'esecuzione mi produce:
function 1A
Fatal error: Cannot access private property MyClass::$var3 in /membri/gaspare/oop/trait.php on line 46
L'errore è relativo al tentativo di accedere a $var3 direttamente dalla classe, ma perché non riesco a stampare nemmeno da dentro al trait? L'assegnazione avviene?