auf Eigenschaften Elternklasse zugreifen

campari

Erfahrenes Mitglied
Moin,
mir ist grunsätzlich unklar, wie ich in Kindklasse Werte der Eigenschaften von Elternklasse erhalte.

Sohn->sagPapa() gibt NULL zurück. Wie kann die Eigenschaft von Papa zurückgeben werden?

PHP:
class Papa
{
    protected $config;
    
    /**
    * @param array aConfig
    **/
    public function initConfig($aConfig) {
        $this->config = (object) $aConfig;
    }
}

class Sohn extends Papa
{
    public function sagPapa() {
        return $this->config;
    }
}
 
Ich weiß nicht wo dein Problem liegt?
PHP:
<?php
class Papa
{
    protected $config;

    /**
    * @param array aConfig
    **/
    public function initConfig($aConfig) {
        $this->config = (object) $aConfig;
    }
}

class Sohn extends Papa
{
    public function sagPapa() {
        return $this->config;
    }
}
$sohn = new Sohn();
$sohn->initConfig(array("test", "test"));
var_dump($sohn->sagPapa());
?>

edit: ahh, ich glaube ich weiß was du suchst. Google mal nach "static" ;)
 
Mit static geht es, danke.

Finde allerdings schräg, dass auf Eigenschaften der Elternklasse nicht mit dem this-Operator zugegriffen werden kann, auf Methoden allerdings schon.
Zudem wird immer gesagt, dass "Elternklassen ihre Methoden und Eigenschaften an die Kindklassen vererben". Irgendwie nicht schlüssig.
 
:confused:
Was geht nicht? Du kannst jederzeit auf normale Properties der Parent-Klasse zugreifen sofern diese nicht private sind.
campari, zeig doch mal wie du deine Beispielklasse aufrufst und was den nicht geht
 
Elternklasse:
PHP:
class Papa
{
    protected $config=array();
    
    public function initConfig($aConfig) {
        $this->config = $aConfig;
    }
}

Kindklasse:
PHP:
class Sohn extends Papa
{
    public function getConfig() {
        return $this->config;
    }
}

var_dump() ergibt NULL:
PHP:
$aConfig = array('x','y');

$oPapa = new Papa();
$oPapa->initConfig($aConfig);

$oSohn = new Sohn();
var_dump($oSohn->getConfig());

Möchte die Konfiguration natürlich nur einmal initialisieren, und in allen Kindklassen auf das Config-Array zugreifen.

Wenn ich jetzt wie timestamp meinte, die Eigenschaft statisch deklariere, gibt var_dump(parent::$config); mein Config-Array aus. Wunderbar. Aber ich find es leicht unlogisch, dass auf Methoden in den Kindklassen mit this-Operator zugegriffen werden kann, auf Eigenschfaten aber nicht.
 
Zuletzt bearbeitet:
Was du machst, macht ja auch keinen Sinn.

Die Klasse Sohn erbt von Papa, ja, aber sie erbt NICHT von einem existierenden Objekt, sondern von der Grundklasse.

PHP:
$oSohn = new Sohn();
$oSohn->initConfig($aConfig);
var_dump($oSohn->getConfig());

Das würde das von dir gewünschte Ergebnis bringen, zumindest von der Ausgabe.

Von der Funktionalität her, müsstest du das Config Objekt übergeben oder als global deklarieren, was nicht so schön ist.
Alternativ könntest du dir auch das Singleton Pattern anschauen.
 

Neue Beiträge

Zurück