2017-03-14 14 views
1

プロジェクトのすべてのファイルでクラスのインスタンス化を実行する最も安全な方法を見つけることを試みています。現在、私は次の方法を使用しています。これは安全ですか?私はそれを$ _SESSIONに格納すべきですか?どんな指導も大歓迎です!タイ!クラスインスタンシエーションをシリアル化してfile_put_contentsに保存することは安全ですか?

(./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

'$ user'の目的に応じて、' $ _SESSION'に格納しておくべきだと思います。PHPファイルは普通のテキストファイルやデータファイルだけでなく、プログラミングファイルです。セッション間で情報を必要とする)普通のファイルや配列などに格納する – niceman

答えて

0

クラスに通常のデータ(文字列、数値、配列、その他のオブジェクト)が含まれている場合は、ファイルにシリアライズして保存しても問題ありません。

外部エンティティ(データベースやネットワーク接続など)に関連する動的情報が含まれている場合は、シリアル化して復元する際にこの問題を解決するための__sleep() and __wakeup()マジックメソッドを定義する必要があります。

0

実装しようとしている機能の種類は不思議です。要求の間でオブジェクトを共有するために、ファイル内の直列化されたインスタンスを保持することは可能です。また、データベースに保存することもできます。 (また、バーマーのヒントには__sleep()__wakeupに注意してください)。しかし、ほとんどの場合、標準的なアプローチは、新しいリクエストがあるたびにオブジェクトを新たにインスタンス化することです。

ファイル名がindex.phpuser-profile.phpの場合、ユーザーのコンテンツを扱っている可能性があります。提案されたソリューションでは、すべてのリクエストに対して同じインスタンスをロードします(リクエストを行ったユーザーに関係なく)。何らかのユーザーオブジェクトを扱っているのであれば、おそらくあなたが望むものではありません。その場合は、$ _SESSIONをストレージとして使用する必要があります。

関連する問題