OOP:Neue instanzen mit verschiedenen Unterklassen

B

besi

Hallo,

Ich habe eine Hauptklasse Field diese hat Kinder z.B. textfield, choicefield, emailfield.

Nun möchte ich folgendes machen:

PHP:
$myfields[] = new xxxfield($name,$value);

'xxx' soll anhand eines Strings durch text,choice oder email ersetzt werden. Ich habe daran gedacht zuerst alle als Field zu instanzieren und dann später eine Typenkonvertierung (also so klappts in java) durchzuführen. Doch dann stellt sich wieder das selbe Problem und ich möchte zudem, dass der Konstruktor der Kindklasse ausgeführt wird, nicht der parent-Konstruktor.

Im Notfall werde ich es so lösen, aber das mache ich natürlich sehr sehr ungerne weil es dann Probleme gibt, wenn neue Kindklassen dazukommen:

PHP:
if($type="text")
  $myfields[] = new textfield($name,$value);
if($type="choice")
  $myfields[] = new choicefield($name,$value);
if($type="email")
  $myfields[] = new emailfield($name,$value);
Bitte kann mir da irgendjemand weiterhelfen und mich vor obiger Bastel-Lösung zu bewahren?
 
Zuletzt bearbeitet von einem Moderator:
Hm.. hoffe ich hab dich richtig verstanden..
Wieso machst Du nicht einfach eine Klasse, an deren Konstruktor Du das gewünschte Element übergibst und dann dementsprechend im Konstruktor erstellst?

Also z.B.:
PHP:
$myfields[] = new field($name,$value,String TYP);
$myfields[] = new field($name,$value,'email');
 
Erstelle dir entweder eine Factorymethode (die wohl so aussehen wird wie deine „Notfalllösung“) oder erfreue dich an folgender Möglichkeit:
PHP:
<?php

$type = 'text';
$classname = $type.'field';
$instance = new $classname($name, $value);

?>
 
Zurück