private var und class extends
frankx
- php
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
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