[OOP] Rückgabe bei Klasseninstanzierung möglich?

Igäl

Erfahrenes Mitglied
Morgen Leute

Da die Doku bei mir grad etwas Schwierigkeiten macht (im Sinne von: lädt nicht), frage ich halt kurz hier nach.

PHP:
$obj_testclass = new Testclass();
//So gehts nicht
print_r($obj_testclass->arr2);
//So gehts
print_r($obj->arr);

class Testclass() {
  var $arr = Array();
  public function __construct() {
    $this->arr = $this->get_array();
    $arr2 = $this->get_array();

    return $arr2;  //geht natürlich nicht, wäre jedoch wünschenswert was in der Art zu haben
  }

  private function get_array() {
    $array = Array();
    $array[] = "Rot";
    $array[] = "Gruen";
    $array[] = "Blau";
    return $array;
  }
}

Gibt es eine Möglichkeit, den Konstruktor Daten an das Script zurückgeben zu lassen? Oder ist der Weg es über Klassenvariablen zu machen, die dann vom "Aufruferscript" ausgelesen werden auch okay? Hätte die Daten aber lieber im "Aufruferscript" anstatt sie aus der Klasse zu holen. Gibts da einen Weg oder ein adäquates Workaround?

Gruss Igäl
 
Das scheint leider nicht moeglich zu sein.
Problem ist ja auch, dass bei der Instanziierung ja normalerweise die Instanz zurueckgegeben wird, und nicht irgendein anderer Wert aus dem Konstruktor.

Hatte auch mal damit rumprobiert dass eventuell false zurueckgegeben werden soll wenn der Konstruktor nicht machen kann was er soll, aber hab dabei auf Granit gebissen.
 
Und wie beurteilst du die Alternative, das Ganze in eine Klassenvariablen abzulegen und aus dem "Aufruferscript" (sagt mir dafür bitte ein anderes Wort ^^ ) darauf zuzugreifen?
Es handelt sich hierbei um einen Hash, der die Daten eines Datensatzes aus der Datenbank beinhaltet. Also keine grossen Datenmengen.

Alternativ kann der Konstruktor auch die Daten in einer Klassenvariablen ablegen und eine andere Methode sorgt dann für die Rückgabe an das "Aufruferscript". Was ist nun geschickter? -->
PHP:
$obj = new TestClass();
$data_arr = $obj->$arr; //direkter Zugriff auf Klassenvariable

//ODER

$obj = new TestClass();
$data_arr = $obj->get_class_var(); //Aufruf einer Funktion in der lediglich return $this->arr; steht
 
Zuletzt bearbeitet:
Der beste Weg wuerde hier wohl ueber eine Variable in der Klasse laufen die dann ueber eine zusaetzliche Methode ausgelesen wird.
Oder, was mir grad einfaellt, waere dem Konstruktor eine Variable per Referenz zu uebergeben, diese koennte dann im Konstruktor geaendert werden und es braucht weder einen Rueckgabewert noch eine zusaetzliche Methode um an die Daten zu kommen.
 
Vielen Dank für den Input. Das ist eine gute Idee:

PHP:
<?php
class Test	{
 public function __construct($mod) {
    $mod = $this->get_array();
  }

  private function get_array() {
    $array = Array();
    $array[] = "Rot";
    $array[] = "Gruen";
    $array[] = "Blau";
    return $array;
  }
}
?>

PHP:
<?
	include "Test.class.php";

	$mod = Array();

	$obj = new Test(&$mod);

	print_r($mod);
?>

Das funktioniert wunderbar. Herzlichen Dank.
 
Zurück