$.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 ファイルもあります。すなわち:
<?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 シングルトンを使いたいと思っています。