我在PHP中具有以下Singleton类。
class CounterBalance{
private static $instance;
private $counterBalance;
private function __construct(){
$this->counterBalance = mt_rand(1, 4);
}
// Getter method for creating/returning the single instance of this class
public final static function getInstance() {
if(!self::$instance) {
self::$instance = new CounterBalance();
echo "CounterBalance constructed <br/>";
}
return self::$instance;
}
public function getCounterBalanceValue() {
return $this->counterBalance;
}
}
但是在上课的时候
CounterBalance::getInstance()->getCounterBalanceValue();
在同一个php页面上,它可以正常工作。但是它不能跨页面正常工作。当我在随后的php页面中执行相同的函数调用时,我得到了CounterBalance的多个实例。
谁能解释为什么会这样。
提前致谢。
参考方案
欢迎来到HTTP的无状态世界。
单例只能针对单页加载(或其他任何PHP数据结构)持久存在。当php进程死亡时,单例者随之死亡。下次加载页面时,将再次创建单例。单例仅在该单个过程的上下文中有效。如果您尝试在单个脚本执行期间创建十个实例,则将维护单个实例。
如果需要跨页面的数据持久性,则必须实现状态代理。例如,$_SESSION
或$_GET
超级全局变量或将数据存储在数据库中(例如),然后在后续页面加载时重新检索它。
我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…
php fopen相对路径断开-神秘 - php我知道“必须进行某些更改”,但是我的代码似乎整夜无故中断。我的服务器目录结构是这样的: / /脚本 /审计 /其他事情我在“脚本”文件夹中有一个脚本(假设它被称为“ /scripts/MyScript.php”),该脚本使用curl收集网页中的数据,并将其日期过的副本保存在“审核”文件夹中。要写入审核文件夹,我使用了 $ fh = fopen(“ ./ au…
Yii,yiic和console - php在Yii的安装说明中,有必要使用控制台和命令行实用程序-yiic。好吧,在我的共享主机上,我没有SSH访问权限。这就是为什么我有以下问题:我必须多久使用一次控制台?出于什么原因?有办法避免使用Yiic吗?我可以在本地服务器上运行yiic,然后将所有内容传输到最终的Web服务器吗?谢谢! php参考方案 来自Yii论坛的答案:不,您不在生产服务器上使用yiic…
在访问另一页面后保留浏览器滚动位置 - php我正在使用JS,JQuery和PHP,试图解决无限滚动问题。问题是,如果您在页面上滚动很长一段时间,并且用ajax加载了更多页面,然后单击链接转到新页面,那么在使用浏览器时如何自动转到旧页面中的同一位置新页面上的返回按钮?。新页面使用ajax滚动加载。 php参考方案 我想出的解决方案是在离开页面之前,将每个页面与相关数据一起存储。需要以下信息来保持滚动位置…
将一个PHP对象发送到另一个PHP页面 - php我想知道是否有一种方法可以将PHP对象发送到另一台计算机上的另一个PHP页面?例如-我实现了一个构造Trie的类。现在,在构造Trie之后,我想将对象发送到另一个PHP页面,以便它也可以访问该对象。可行的选择是将其包装到某种编码的JSON请求中,然后将其发送到可以使用jQuery将其中继到所需页面的页面吗?对不起,我对此绝对陌生!将感谢提供的任何帮助。干杯!…