Moinsen. Ich habe hier folgendes problem:
Ich benutzt PHP, um einige abläufe auf meinem pc zu automatisieren. Das ganze funktioniert soweit auch gut, ich hätte nur gerne eine möglichkeit, den Code des scripts zur laufzeit anzupassen. Sprich, wenn ich änderungen im code vornehme, muss ich das script ja neu starten. der Start des scripts benötigt einige abläufe, die etwa 10 minuten zeit in anspruch nehmen. um kleine bugs auszumerzen ist das eindeutig zu lang. Um variablen zur laufzeit zu ändern habe ich bereits ein command interface hinein programmiert.
Nun zur frage: Unter C ist es ja möglich, eine Funktion zur laufzeit in eine variable zu laden, und dann auszuführen(über umwege aber es geht, man kann zb den modifizierten code in den speicher laden und die pointeraddresse einer funktion auf diesen legen). Gibt es etwas ähnliches für php code?
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
Schon mal eval() angeschaut?
Ansonsten unterstützt PHP auch noch variable Funktionsnamen:
$var(...)
Ich frage mich allerdings ob es nicht genausogut möglich wäre die Ergebnisse der ersten 10 Minuten zwischenzuspeichern...
Gruß
Borlander
perfekt. eval hört sich genau nach dem an was ich suche. Das zwischenspeichern der Variablen wäre im übrgien eine schöne idee, dummerweise sind hier auch handles zu netzwerkverbindungen dabei. die kann ich ja nicht einfach so abspeichern.
eval kommt der erfüllung meiner Vorstellungen schon verdammt nahe.
Was noch praktischer wäre... Ich speichere jede funktion in eine eigene php datei, diese werden dann allesamt per include eingebunden. gäbe es da nicht die möglichkeit diese dateien(und damit die funktionen) direkt neu zu laden?
Wenn man davon absieht das es die Performance sicher ziemlich mies würde:
Du könntest einfach den Funktionsrumpf in eine eigene Datei auslagern und diese Datei dann bei bei jedem Aufruf includieren:
function dummy(...) {
return (include 'dummy.body.php');
}
auf die idee das mit include zu realisieren bin ich bereits gekommen. das Problem daran ist, dass der Parser die includierte datei(so deren dateiname zur laufzeit bereits feststeht) bereits einbindet und verarbeitet. Dennoch hast du mich da auf die idee gebracht, den Dateinamen für die zu includierende funktion über das commandinterface zu setzen. nun noch eine letzte frage. Kann ich bereits evaluierten code wieder aus dem programm entfernen?
Parser und Laufzeit?
Zur Laufzeit steht der Dateiname der include-Datei immer fest ;-)
Du könntest natürlich auch einfach drauf verzichten einen konstanten Dateinamen zu vergeben. Da müsste man dann allerdings noch mal schauen ob ggf. Caching-Mechanismen für die Code-Dateien eingesetzt werden bzw. wie die genau arbeiten...
So richtig sauber scheint mir das alles nicht.