Marc Reichelt: Klasseninstanz mit Parametern aus Array

Beitrag lesen

Hallo Till,

Ich habe eine Klasse:
  foo($bar, $foobar)

Ich habe eine Datei mit einem Array:
  $foo = array('bar', 'foobar')

Ich möchte nun die Klasse mit den Parametern aus dem Array aufrufen
  $bar = foo('bar', 'foobar') <-- nur dynamisch...

Ich habe es mit
  $bar = new foo(eval(implode(', ', $foo)));
versucht, aber das klappt nicht.
Weiß jemand wie ich dies bewerkstelligen kann?

Ich möchte _nicht_ den Array in der Klasse "verarbeiten".

Nachdem ich mein letztes Posting abgesetzt hatte, war ich noch unzufrieden - Probleme informatischer Art ziehen mich aber magisch an und lassen mich nicht mehr los, also habe ich versucht dein Vorhaben an einem Beispiel umzusetzen. Ich habe etwa 20 Minuten gebraucht, aber jetzt hab ich das Problem gelöst (auch wenn es ein ziemlich blöder Hack ist).
Folgenden Code kannst du mal ansehen und austesten:

---schni schna schnappi---
<?php
 // Array mit Werten erzeugen - das müssen hier alles Strings sein!
 $foobar = Array("Hallo", " Welt!");

// eine einfache Funktion, die alle übergebenen Strings zusammenfügt
 function addStrings()
 {
  $result = "";
  for($i=0; $i<func_num_args(); $i++)
  {
   $result .= func_get_arg($i);
  }
  return $result;
 }

// Anführungszeichen vor und nach dem Inhalt der Elemente des Arrays einfügen
 for($i=0; $i<count($foobar); $i++)
 {
  $foobar[$i] = """.$foobar[$i].""";
 }

// Befehl ausführen
 eval( "echo addStrings(" .implode(", ", $foobar). ");" );

// ...und noch eine neue Zeile, damit meine Shell nicht so blöd aussieht ;-)
 echo "\n";
?>
---schnappi schnappi schnapp---

Was sehen wir denn da? Ein einfaches "Hallo Welt!" - mir fiel einfach gerade nichts anderes ein ;-)
Besser aber wäre es, wenn du gleich bei der Deklaration des Arrays alle Zeichen mitaufnimmst, denn mein Beispiel enthält keine Fehlerkontrolle, geschweige denn Typenerkennung.
Mein Beispiel funktioniert nur mit Strings, besser wäre es wenn du auf den automatisierten Teil verzichtest, also den hier:
 for($i=0; $i<count($foobar); $i++)
 {
  $foobar[$i] = """.$foobar[$i].""";
 }

Dafür musst du dann oben die Arraydeklaration anpassen, und zwar so wie deine Werte es haben wollen. Statt
 $foobar = Array(2, 0, 0, 5, " - Firefox schlägt alle Rekorde");   // funktioniert nicht mit dem obigen Code
müssen wir dann das hier schreiben:
 $foobar = Array("2", "0", "0", "5", "" - Firefox schlägt alle Rekorde"");

Um noch genauer zu sein müssen wir den String noch mit addslashes() markieren, bevor wir die Anführungszeichen außen dransetzen.

Das Problem ist also gelöst.
Jetzt stell dir aber bitte eine Frage: Was ist einfacher, diesen Code zu benutzen und eine Menge an Fehlerausnahmen zu betrachten oder lieber einen winzigen Code für das Array in die Klassenmethode hineinbauen? ;-)

Bis dann!

Marc Reichelt || http://www.marcreichelt.de/

--
Linux is like a wigwam - no windows, no gates and an Apache inside!
SELFCode: ie:{ fl:| br:> va:} ls:< fo:} rl:( n4:( ss:) de:> js:| ch:? sh:| mo:) zu:)
http://emmanuel.dammerer.at/selfcode.html