PHP中的单例模式…如何在请求之间保存状态
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP中的单例模式…如何在请求之间保存状态,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1584字,纯文字阅读大概需要3分钟。
内容图文
通过使用静态变量和单例模式,我认为创建一个简单的购物车很容易,记住了当另一个页面被加载时,购物车中的哪些项目.
我有一个问题,购物车在刷新页面时不记得已经存在的东西.
我的代码是否有问题,或者我应该使用全局或mysql数据库.
存储状态的最佳方法是什么?
<?php
//create a singleton class
class shoppingCart {
private static $_shoppingCartItems = array();
private static $_instance = null;
private function __construct(){
}
public static function getInstance(){
if(self::$_instance == null)
self::$_instance = new shoppingCart();
return self::$_instance;
}
public function add(ShoppingItem $item){
$this->_shoppingCartItems[] = $item;
}
public function cartCount(){
return count($this->_shoppingCartItems);
}
}
?>
履行
$item = new shoppingItem();
$shoppingCart = shoppingCart::getInstance();
$shoppingCart->add($item);
$shoppingCart->add($item);
//should increment by 2 on each page load but it doesn't
echo $shoppingCart->cartCount();
解决方法:
我想我可以在那里看到你的思维模式,但你想要做的事情在很多方面都是错误的.
单身人士不是一个模式,它是一个反模式
Singleton是一种反模式,应该不惜一切代价避免.有关原因,请参阅Gordon的this great answer.
2. HTTP是无状态协议.
您在PHP中所做的任何事情都无助于您在两个请求中保留状态.您的$shoppingCart是从头开始为每个请求创建的,事实上,您的整个应用程序都是.您不应该尝试在对象中保留数据,而应该在每次请求后重新创建状态,方法是从其他位置获取相应的数据.在您的示例中可能来自某种数据库的nosql或sql.
3.会议
您可以在超全局$_SESSION中保留用户特定数据,但在大多数情况下,我建议不要使用它.您的用户会话应保存身份验证和用户数据,但您应避免在其中存储与业务逻辑相关的所有类型的数据.
内容总结
以上是互联网集市为您收集整理的PHP中的单例模式…如何在请求之间保存状态全部内容,希望文章能够帮你解决PHP中的单例模式…如何在请求之间保存状态所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。