Referenzierten Parameter löschen
bubble
- php
0 bubble0 Fred Furunkelstein 20120 dedlfix
0 bubble
Hi,
ich hab folgende Klasse (extrem vereinfacht):
class Bot{
public static create(&$cfg){
return new Bot($cfg);
}
function __construct(&$cfg){
/* do sth. */
unset($cfg); //<- Hier ist das nicht-gewollte Verhalten
}
}
Angenommen folgende Script-Datei wird ausgeführt:
<?php
include "config.php";
$bot = Bot::create($CONFIG);
?>
unset löscht ja nun an sich nur die Referenz auf den eigentlichen Speicher, ich würde nun gerne aber $CONFIG löschen. Das Problem ist, dass $CONFIG auch $bla oder irgendeinen anderen Namen haben könnte.
Hintergrund der ganzen Sacher ist zum ersten, dass ich Speicher den ich danach nicht mehr brauch aufräumen möchte, zum anderen aber auch, dass in der Variablen auch ein Passwort in Klartext enthalten ist.
Die Applikation soll modular erweiterbar sein und Module sollen nicht auf die Konfigurationsdaten zugreifen können.
Gibt es eine Möglichkeit?
MfG
bubble
PS: Frohes Fest euch allen :)
Okay ich hatte einen kleinen Tippfehler bei der Übergabe von $cfg an den Konstruktor im eigentlichen Code. Also ich bekomm die die Variable auf NULL gesetzt, würde sie aber gerne komplett aus dem Speicher entfernen.
MfG
bubble
Also ich bekomm die die Variable auf NULL gesetzt, würde sie aber gerne komplett aus dem Speicher entfernen.
Das macht der Garbage-Collector schon von selbst.
Die Applikation soll modular erweiterbar sein und Module sollen nicht auf die Konfigurationsdaten zugreifen können.
Für mich ist schon der erste zitierte Satz mit einem inneren Widerspruch belegt.
public static create(&$cfg){
Wenn Du etwas nicht öffentlich haben willst, warum publizierst Du dann genau das? Das ist für mich wie eine Zeitung zu drucken, diese zu verteilen und dabei nicht zu wollen, dass jemand den Leitartikel liest.
dass in der Variablen auch ein Passwort in Klartext enthalten ist.
Tatsächlich ist also nicht die angewandte Praxis, sondern die Philosophie Dein Problem.
Tach!
Angenommen folgende Script-Datei wird ausgeführt:
<?php
include "config.php";
$bot = Bot::create($CONFIG);
?>
>
> unset löscht ja nun an sich nur die Referenz auf den eigentlichen Speicher, ich würde nun gerne aber $CONFIG löschen. Das Problem ist, dass $CONFIG auch $bla oder irgendeinen anderen Namen haben könnte.
Oder gar nicht zwingend als benannte Variable existieren muss, wenn du keine Referenz verlangen würdest. Da könnte auch ein Funktionsergebnis oder ein direkt angelegtes Array übergeben werden.
> Hintergrund der ganzen Sacher ist zum ersten, dass ich Speicher den ich danach nicht mehr brauch aufräumen möchte, zum anderen aber auch, dass in der Variablen auch ein Passwort in Klartext enthalten ist.
> Die Applikation soll modular erweiterbar sein und Module sollen nicht auf die Konfigurationsdaten zugreifen können.
Das kann sie in jedem Fall, weil auch der restliche Code die Möglichkeit hat, die Konfig-Datei zu inkludieren.
Du kannst auch die Include-Datei so umschreiben, dass die Konfigurationsdaten nur innerhalb einer Funktion, z.B. readConfigData(), als Variablen existieren. Die Funktion liefert diese Werte als Ergebnis und der Funktionsaufruf ist anstelle des jetzigen $CONFIG als Parameter deiner create()-Methode notiert. Auch dann kann jeder readConfigData() aufrufen. Und wenn dir noch eine andere Methode einfällt, dann kann diese durch Lesen der Konfigurationsdatendatei umgangen werden.
> Gibt es eine Möglichkeit?
Keine wirksame. Alles was im Kontext des Programmes lebt, kann auch gelesen werden. Selbst private Eigenschaften von Objekten können mit print\_r() oder var\_dump() sichtbar gemacht werden.
dedlfix.
Da hab ich ja ziemlich viel Mist fabriziert =/
Danke für eure Hilfe.
Ich werd mir jetzt nochmal die nächsten Tage den Kopf zerbrechen, wie ich das System umstrukturieren kann. :)
MfG
bubble