andi_b: PHP :: objektreferenzen aus funktion

Beitrag lesen

moijen alle,

ich habe mir gerade die featurelist von php5 durchgelesen und bin dabei auf eine für mich interessante stelle gestossen: objektrefenzen aus funktionen zurückgeben http://php5.de/zend-engine-2.php.

dort steht, dass das neu wäre. jetzt habe ich das mal in 4 probiert und es funktioniert auch. ist an dem beispiel jetzt was dran, was 'gefährlich' ist (irgendwelche objekte, die zu früh gelöscht werden könnten)?

danke für eure hilfe,

andi

<?php
/*---------------------------
 parent class for extending
---------------------------*/
class parentClass{
 function parentClass(){
  out::o("constructing class parentClass");
 }

function insideParent($string = ""){
  out::o("calling parentClass".$string);
 }
}
/*---------------------------
 child classes
---------------------------*/

class bum extends parentClass {
 function bum(){
  parent::parentClass();
  out::o("constructing class bum");
 }
}

class bam extends parentClass {
 function bam(){
  out::o("constructing class bam");
 }
}
/*---------------------------
 class instantiating the child classes, returns reference to object
---------------------------*/

class constructionClass{
 function constructionClass(){
  out::o("constructing class constructionClass");
 }

function caller($string){
  switch ($string){
   case "bum":
    $bumInside = &new bum();
    return $bumInside;
    break;
   case "bam":
    $bamInside = &new bam();
    return $bamInside;
    break;
   default:
    out::o("ERROR: no valid parameter");
    break;
  }
 }
}
//***************************
/*---------------------------
 main
---------------------------*/
$cc = &new constructionClass();
out::o("---");

$bum = &$cc->caller("bum");
$bam = &$cc->caller("bam");
out::o("---");

$bum->insideParent();
$bam->insideParent();
out::o("---");

$bumStatic = &caller("bum");
$bamStatic = &caller("bam");
$bumStatic->insideParent();
$bamStatic->insideParent();

//END main
//***************************

/*---------------------------
 static function, same as in constructionClass
---------------------------*/
function caller($string){
 switch ($string){
  case "bum":
   $bumInside = &new bum();
   return $bumInside;
   break;
  case "bam":
   $bamInside = &new bam();
   return $bamInside;
   break;
  default:
   out::o("ERROR: no valid parameter");
   break;
 }
}
/*---------------------------
 function for output
---------------------------*/
class out{
 function o($out){
  echo $out."<br />";
 }
}
?>