[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Verschachteltes OOP
Seite 1 von 1

Verschachteltes OOP

Verfasst: 2. Apr 2013, 12:51
von Meusi
Hallo Leute :)

ich hab ein kleines Problem :)

ich hab eine Form Klasse wo spezielle Inputs etc generiert werden, dazu gibts die Funktion auch Select-Felder hinzuzufügen. Das ganz sieht so aus:

Code: Alles auswählen

$form = new form(...);
$form->addSelect('selectname');
$form->addSelect->add('name', 'value');
$form->addSelect->add('name', 'value');
$form->addSelect->add('name', 'value');
$form->addSelect->out();
der PHP Code dazu ist:

Code: Alles auswählen

class form{
var $ausgabe = array();
var $addSelect;
/* .... */
function addSelect($name, $selected = '', $attributes = array()) {
	$selected = ($this->get($selected)) ? $this->get($selected) : $selected;
	$this->addSelect = new SelectField($name, $selected, $this->temp_head, $attributes);	
}
/* .... */
}

class SelectField extends form {

var $chache = array(); #Zwischenspeichern

function add($name, $value, $attributes = array()) {
if($name == $this->selected  && $this->selected != false) $attributes['selected'] = 'selected';		
$this->chache[]= $this->add_field($name, $value, 'option', $attributes); #add_field kommt von form
}

function out() {
		
		global $form;
		
		$return = '';
		foreach($this->chache as $val) {
			$return .= $val;	
		} 
		
		$form->ausgabe[] = '<div class="form_list>
			'.$this->temp_head.'
			<select name="'.$this->name.'" '.$attributes.'>
			'.$return.'
			</select>
		</div>';
		
		$this->temp_head = '';
	}

}
Mein Problem: durch das global $form beim out() ist der Benutzer dazu gezwungen die Klasse mit $form zu starten/cachen. Wie kann ich wieder auf die Oberklasse zurückgreifen? parent:: würde ja hier nicht funktionieren.

Optimierung: Kann man auch irgendwie das $form->addSelect->out(); weglassen? sodass er das am Ende autoamtisch in die Variable speichert?

Würd mich tierisch über Antworten freuen :)

Gruß Meusi

Re: Verschachteltes OOP

Verfasst: 2. Apr 2013, 13:08
von Xong
Hi Meusi,

warum nimmst du nicht die rex_form- oder rex_xform-Klasse? Das würde ich an deiner Stelle eindeutig bevorzugen.
Meusi hat geschrieben:Mein Problem: durch das global $form beim out() ist der Benutzer dazu gezwungen die Klasse mit $form zu starten/cachen. Wie kann ich wieder auf die Oberklasse zurückgreifen? parent:: würde ja hier nicht funktionieren.
$this würde funktioniert. Klassenvariablen werden an die Kindklasse vererbt.
Meusi hat geschrieben:Optimierung: Kann man auch irgendwie das $form->addSelect->out(); weglassen? sodass er das am Ende autoamtisch in die Variable speichert?
Eigentlich sollte es am Ende nur eine out- oder show-Methode geben, die die Ausgabemethoden der angehängten Elemente aufruft.

Re: Verschachteltes OOP

Verfasst: 2. Apr 2013, 13:14
von Meusi
hey :)

wenns Redaxo wär, würde ich in ein anderes Forum-abteil posten :)

geh davon aus, dass der Code 100% von mir stammt :)

mit $this würde aber in der klasse SelectField gespeichert. ich möchte aber das er auf die "Obere Klasse" das speichert :)

Wegen der Optimierung: war bestimmt auf Redaxo bezogen oder?

hier sieht die ganze Datei:

https://github.com/Sysix-Coding/Sysix-C ... m/form.php

denk dir nix dabei, ist nur immoment Test-Phase und programmiere das zum Spaß :)

Mfg Meusi

Re: Verschachteltes OOP

Verfasst: 4. Apr 2013, 10:52
von Meusi
*vorsichtiger* push :roll: