frankx: private var und class extends

Hellihello

  
 class Record1 {  
  private $vars=array();  
  function __construct() {  
   $this->vars['Feld1']="Feld1";  
  }  
 }  
 class Record2 extends Record1 {  
  function __construct() {  
   $this->vars['Feld2']="Feld2";  
  }  
 }  
  
 $record2=new Record2;  
 var_dump ($record2);  
?>  
  

ergibt als Ausgabe:

object(Record2)#2 (2) {
  ["vars:private"]=>
  array(0) {
  }
  ["vars"]=>
  array(1) {
    ["Feld2"]=>
    string(5) "Feld2"
  }
}

Lasse ich den Konstruktor in der erbenden Klasse weg, ist die Varialbe Feld1 unter "vars:private" zu finden. Macht das Sinn, dass die erbende Klasse nicht mit eigenen Funktionen auf die private Variable zugreifen kann und statt dessen automatisch eine public-Var erzeugt wird?

Dank und Gruß,

frankx

  1. Hallo,

    class Record1 {
      private $vars=array();
      function __construct() {
       $this->vars['Feld1']="Feld1";
      }
    }
    class Record2 extends Record1 {
      function __construct() {
       $this->vars['Feld2']="Feld2";
      }
    }

    $record2=new Record2;
    var_dump ($record2);
    ?>

      
    
    > Lasse ich den Konstruktor in der erbenden Klasse weg, ist die Varialbe Feld1 unter "vars:private" zu finden. Macht das Sinn, dass die erbende Klasse nicht mit eigenen Funktionen auf die private Variable zugreifen kann und statt dessen automatisch eine public-Var erzeugt wird?  
    
    Ja, denn so ist [private](http://www.php.net/manual/de/language.oop5.visibility.php) nun mal in der OOP normalerweise definiert. Willst Du anderen, auch erbenden, Klassen den Zugriff auf die privaten Eigenschaften gestatten, musst Du hierfür in der Ursprungsklasse eine Methode zur Verfügung stellen, die dann natürlich mindestens protected oder public sein muss.  
      
    ~~~php
      
    <?php  
     header("Content-Type: text/plain; charset=ISO-8859-1");  
     class Record1 {  
      private $vars=array();  
      public function __construct() {  
       $this->vars['Feld1']="Feld1";  
      }  
      protected function setVars($key, $value) {  
       $this->vars[$key]=$value;  
      }  
     }  
     class Record2 extends Record1 {  
      function __construct() {  
       parent::__construct();  
       $this->setVars('Feld2', "Feld2");  
      }  
     }  
      
     $record2=new Record2;  
     var_dump ($record2);  
      
    ?>  
    
    

    Du kannst natürlich auch die Eigenschaft $vars als protected deklarieren.

    viele Grüße

    Axel