2017-03-14 2 views
1

Ich versuche den besten/sichersten Weg zu finden, meine Klasseninstanziierung durch alle Dateien in meinem Projekt zu übertragen. Zur Zeit verwende ich die folgende Methode. Ist das sicher? Soll ich es in der $ _SESSION speichern? Jede Anleitung würde sehr geschätzt werden! Ty!Sicher Klasseninstanz zu serialisieren und in file_put_contents zu speichern?

(./classes/test-class.php) 
class MyTestClass { 
    private $name; 
    function __construct($newName){ 
    $this->name = $newName; 
    } 
    public function get_name(){ 
    return $this->name; 
    } 
} 


(index.php) 
require_once('./classes/test-class.php'); 
$user = new MyTestClass("Bob"); 
$s = serialize($user); 
file_put_contents('store-obj.php', $s); 


(user-profile.php) 
require_once('./classes/test-class.php'); 
$s = file_get_contents('store-obj.php'); 
$user = unserialize($s); 
echo $user->get_name(); // Returns "Bob" 
+0

je nach dem Zweck von '$ user', ich glaube, Sie sollten es in' $ _SESSION' speichern, neben PHP-Dateien sind Programmdateien nicht nur gewöhnliche Textdateien oder Dateien, wenn Sie unbedingt speichern müssen (vielleicht Sie will die info über Sitzungen) speichern Sie es in einer normalen Datei, Array, etc – niceman

Antwort

0

Wenn die Klasse gewöhnliche Daten nur enthält (Strings, Zahlen, Arrays, andere Objekte), Serialisierung und sie in einer Datei zu speichern ist in Ordnung.

Wenn es dynamische Informationen enthält, die sich auf externe Entitäten beziehen (wie Datenbanken und Netzwerkverbindungen), müssen Sie die __sleep() and __wakeup() magischen Methoden definieren, um dies beim Serialisieren zu bereinigen und beim Deinialisieren wiederherzustellen.

0

Ich frage mich, welche Art von Funktion Sie implementieren möchten. Das Fortbestehen einer serialisierten Instanz in einer Datei, um das Objekt zwischen Anfragen zu teilen, funktioniert, ja. Sie können es auch in einer Datenbank speichern. (Und beachten Sie den Barmar-Hinweis zu __sleep() und __wakeup). In den meisten Fällen besteht der Standardansatz jedoch darin, Ihr Objekt bei jeder neuen Anforderung neu zu instanziieren.

Und Ihre Dateinamen index.php und user-profile.php lassen mich vermuten, dass es sich um Benutzerinhalte handelt. Mit Ihrer vorgeschlagenen Lösung laden Sie dieselbe Instanz für alle Anfragen (unabhängig vom Benutzer, der die Anfrage gestellt hat). Wenn Sie mit einer Art von Benutzerobjekt arbeiten, ist das wahrscheinlich nicht das, was Sie wollen. In diesem Fall sollten Sie $ _SESSION als Speicher verwenden.

Verwandte Themen