phpbar.de logo

Mailinglisten-Archive

[php] Nochmal Logikfehler ?!

[php] Nochmal Logikfehler ?!

Dennis Sterzenbach lists at darknoise.de
Die Sep 30 13:57:20 CEST 2003


<snip>
>   function new_child($name){
>     $this->childs[$this->i]= new secondlevel($name);
>     $this->i++;
>   }
</snip>

müsste eher so lauten:
  function &new_child($name){
    $this->childs[$this->i]= new secondlevel($name);
    $this->i++;
    return $this->childs[$this->i];
  }


Des Weiteren möchte ich Dir den Tip geben, Deine new_child
Methoden abzuändern, z.B. so:

function &new_child($name)
{
    // ist kein name gegeben, raus hier mit null
    if (empty($name)) {
        return null;
    }

    $new_child = new secondlevel($name);
    if (is_object($new_child)) {
        $this->childs[] = $new_child;
        return $new_child;
    } else {
        return null;
    }
}


// TESTCODE:
$mynewc=& $obj->new_child("testname");
if ($mynewc === null) {
    die('WTF?! kein new_child von obj erhalten');
}


Vorteil: Der Code ist wesentlich robuster und stürtzt
nicht einfach "mir nichts dir nichts" ab.

Zweiter Vorteil: Weniger Resourcenaufwand.
Du brauchst die Member-Variable $i nicht wirklich.
Du kannst genauso eine getCount() Methode einbauen:
function getCount()
{
    return count($this->childs);
}

Gut Vorteil ist bei großen Strukturen in den Arrays,
dass der Durchlauf von count() länger dauert als der
Zugriff auf die Variable.
Aber generell plädiere ich dafür, get und set Methoden
zu implementieren und auch im Klassen-eigenen Code
mit diesen und nicht direkt mit Membervariablen zu
hantieren.

Übrigens kannst Du auch in der Methode output()
statt
$html=$html.$this->text;
  einfacher
$html .= $this->text;
schreiben.

HTH
Gruß
             ----- -+- -----
 Dennis Sterzenbach - FI/AE
 email: dennis at darknoise.de
 web  : http://www.darknoise.de




php::bar PHP Wiki   -   Listenarchive