似乎 $.ajax (jQuery) 不适用于 PHP Singleton。
我有一个这样定义的简单类:
class MySingleton
{
protected static $instance = null;
private $array;
protected function __construct()
{
...
$this->array = array();
//get something from database,
$this->array[] = object from database;
$this->array[] = object from database;
...
}
protected function __clone()
{
}
public static function getInstance()
{
if (!isset(static::$instance)) {
static::$instance = new static;
}
return static::$instance;
}
public function someFunction() {
$this->array[0]->someField = "set something without saving it to database";
...
}
}
我还有一个 helper.php 文件,它可以获取单例对象然后做一些事情。IE:
<?php
require "MySingleton.php";
$singleton = MySingleton::getInstance();
$singleton->someFunction();
$singleton->someOtherFunction();
?>
在我的 index.php 中,我尝试使用 $.ajax 为我做一些事情:
$.each(data, function(key, value) {
$.ajax({
url: 'helper.php',
type: 'POST',
data: someData,
dataType: 'JSON'
}).always(function(result) {
...
});
});//each
正如您在我的 jQuery 代码中看到的那样,我已经调用了几次 $.ajax。
我跟踪了 MySingleton,并没有返回相同的实例,而是创建了几次(取决于 $.each 循环大小)。
发生这种情况是因为单例模式仅在同一请求期间有效。在我的情况下,我有一些 ajax 请求(同样,基于 $.each 循环),这就是为什么它从来没有工作过。
我使用单例对象的原因是因为我不想建立多个数据库连接,而且 MySingleton 将有一个数组(将用于存储一些对象)并且在 MySingleton 类中我将使用该数组来临时存储一些信息而不将其保存回数据库)
那么有什么办法可以解决我的问题吗?我真的很想使用 $.ajax 和 PHP Singleton。