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?