我需要将PDO连接传递到cart
的{{1}}类,
controller
但我认为问题出在function __construct($connection)
{
$this->cart = new cart($connection);
}
serialize()
我收到此错误,
致命错误:未捕获的异常'PDOException',消息'You 无法序列化或反序列化PDO实例 C:\ WAMP \ WWW \ store_2012_MVC \本地\控制器\ class_base_extended_cart.php:89 堆栈跟踪:#0 [内部功能]:PDO-> __ sleep()#1 C:\瓦帕\ WWW \ store_2012_MVC \本地\控制器\ class_base_extended_cart.php(89): serialize(对象(购物车))#2 C:\瓦帕\ WWW \ store_2012_MVC \本地\控制器\ class_factory.php(75): base_extended_cart-> render_page()#3 C:\ wamp \ www \ store_2012_MVC \ index.php(69):factory-> render()#4 {main} 投入 C:\ WAMP \ WWW \ store_2012_MVC \本地\控制器\ class_base_extended_cart.php 第89行
我该如何解决这个问题?
或者我可以使用其他内容代替public function render_page()
{
if (!isset($_SESSION[SESSION_CART]))
{
$cart = $this->cart;
}
else
{
$cart = unserialize($_SESSION[SESSION_CART]);
}
$_SESSION[SESSION_CART] = serialize($cart);
}
吗?
修改
我使用serialize()
和__sleep
魔术方法尝试过,但仍然遇到同样的错误,
__wakeup
答案 0 :(得分:3)
PDO对象包含指向数据库的活动链接(可能具有事务启动或db会话设置和变量)。
您无法序列化PDO对象,因为上述内容会丢失,无法自动重新建立。
您应该重新设计类以使用单独的类(专用于保存数据库连接)静态访问当前数据库链接,而不是在成员变量中保存引用(我在您购买新购物车时会发生这种情况($ connection) )))。
答案 1 :(得分:1)
看看__sleep和__wakeup魔术方法。 http://us.php.net/manual/en/language.oop5.magic.php#object.sleep
它们允许您指定哪些属性被序列化以及哪些属性被忽略。问题在于您需要定期传递PDO对象的实例。