Axel Richter: private var und class extends

Beitrag lesen

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