Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [OOP] Traits

  1. #1

    [OOP] Traits

    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?

  2. #2
    Il forum formatta da schifo il codice, se tento di modificare non vedo il messaggio originale. Riprovo qui:
    codice:
    <?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
    ?>

  3. #3
    Ho fatto qualche modifica, ma continuo a non riuscire a stampare la $var3.
    codice:
    <?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->var3 = $v;
    		}
    	}
    	class MyClass {
    		use MyTrait;
    		public function function5() {
    			echo "function 5 ", $this->var1;
    		}
    		public function writeVar3() {
    			echo $this->var3;
    		}
    	}
    	$myClass = new MyClass();
    	$myClass->function1(); // output => 'function 1'
    	$myClass->setVar3("B");
    	$myClass->writeVar3();
    	echo $myClass->var1;   // output => 'A'
    	echo $myClass->var3;   // errore
    ?>
    Risultato:
    function 1A
    Fatal error: Cannot access private property MyClass::$var3 in /membri/gaspare/oop/trait.php on line 46

  4. #4
    Risolto, l'ultimo codice è giusto, ma aggiornavo da browser un file .php diverso da quello che ricaricavo via ftp...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.