我正在尝试找到在我的项目中的所有文件中进行类实例化的最佳/最安全的方法。目前我使用以下方法。这样安全吗?我应该将它存储在$ _SESSION中吗?任何指导将不胜感激! TY!
(./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 :(得分:0)
如果类只包含普通数据(字符串,数字,数组,其他对象),那么序列化并将其保存在文件中就可以了。
如果它包含与外部实体(例如数据库和网络连接)相关的任何动态信息,则需要在序列化时定义__sleep()
and __wakeup()
魔术方法以清除它,并在反序列化时恢复它。
答案 1 :(得分:0)
我想知道你想要实现什么样的功能。在文件中保留序列化实例以在请求之间共享对象将起作用,是的。您也可以将其存储在数据库中。 (并注意Barmar暗示__sleep()
和__wakeup
)。但在大多数情况下,标准方法是使用每个新请求重新实例化您的对象。
您的文件名index.php
和user-profile.php
让我怀疑您正在处理用户内容。使用您提出的解决方案,您将为每个请求加载相同的实例(无论发出请求的用户如何)。如果你正在处理某种用户对象,那可能不是你想要的。在这种情况下,您应该使用$ _SESSION作为存储。