andere Klasse an aktuelle Klasse anhängen

StefanR

Erfahrenes Mitglied
Hallo,

ich steh nen bissel im Moment aufm Schlauch, weil ich folgendes Problem habe:

Und zwar habe ich eine Layoutklasse, die mit Div Container usw. gefüttert werden soll. So nun habe ich für die Html Sachen eigene Klassen sprich: DivContainer.class.php usw.

So jetzt würde ich gerne zur Laufzeit, an das Layoutobjekt, die Klassen ranhängen. Beispiel:

PHP:
$oLayout = new Layout();
$oLayout->addDivContainer($parameter); //wir geben eine externe Klasse zurück DivContainer
$oLayout->getContent();

Geht das überhaupt mit PHP?

Im Moment sieht das Ganze ungefähr so aus:

PHP:
class Layout {
[....]
function addDivContainer() {
        $this =& new DivContainer($this, $this->oDb);
        return $oDiv;
    } 
[...]
}

class DivContainer {
[...]
    function &__construct(&$oHtml, &$oDb) {
        $this->oDb =& $oDb;
        $this->oRDb =& $oDb;
        $this->oWDb =& $oDb;
        $this->oHtml =& $oHtml;
    }
[...]
}
 
Natürlich geht das!

Du solltest das Objekt aber vorher initialisieren, bevor du es an die Klasse Layout weitergibst.

PHP:
$div = new DivContainer($...);
$oLayout->addDivContainer($div);

greetz
daddz
 
Hy,

gut okay, das funktioniert soweit, nur könnte ich somit, "nur" mittels Eigenschaft, auf die Klasse DivContainer zugreifen, wollte aber, dass die Methoden, von DivContainer, nach der Innitialisierung, quasi zu Layout gehören. (ohne das ich die Layoutklasse extende, an der DivContainerklasse) Ungefähr so:

PHP:
$oLayout = new Layout();
$oLayout->addDivContainer();
$oLayout->addDivStart(); //<-- ist eine Methode aus DivContainer
 
Das funktioniert nicht so ganz, wie du es dir vorstellst.

Du könntest es über einen kleinen Umweg machen.

In der Methode addDivContainer() schreibst du das Objekt in eine Variable.

Über diese kannst du dann die Methoden der DivContainer-Klasse aufrufen.

Beispiel:
PHP:
class Layout {
/.../
    function addDivContainer(&$div, ....) {

        $this->divContainerClass = $div;

    }
}

// Aufruf
$oLayout->divContainerClass->deineMethode();

greetz
daddz
 
Machs jetzt mit Hilfe eines anderen Forums so:

PHP:
class ExtendObject{
    var $aCall;
    function add($oObject){
        $this->aCall[] = $oObject;
    }
    function __get($sName){
        if(isset($this->$sName)) {
            return $this->$sName;
        }
        foreach ($this->aCall as $oVal) {
            if(isset($oVal->$sName)) {
                return $oVal->$sName;
            }
        }
    }
    function __call($sFuncname,$aArgs){
        if(method_exists($this, $sFuncname)) {
            return call_user_func_array(array(&$this, $sFuncname), $aArgs);
        }
        foreach ($this->aCall as $oVal) {
            if(method_exists($oVal, $sFuncname)){
                return call_user_func_array(array(&$oVal, $sFuncname), $aArgs);
            }
        }
    }
}

class probe{
  var $probe="das ist eine Probe";
  function getMember($a,$b){return $this->probe." : ".$a." : ".$b;}
}

class nocheineprobe{
    function getirgendwas($ich, $du) {
        return 'Mein ist ' . $ich . ' du heißt' . $du;
    }
}

$pr= new ExtendObject();
$pr->add(new probe());
$pr->add(new nocheineprobe());
echo $pr->getirgendwas('Stefan', 'Horst') . '<br/>';
echo $pr->getMember("mit","parameter")."<br />";
echo $pr->probe;

Trotzdem danke für die Hilfe! :)
 
Zurück