1

そのため、データを入力するために一度だけ初期化する必要があるクラスがいくつかあります。ここで、AJAX を使用して個別にアクセスしたいのですが、再度初期化する必要はありません。PHP のシングルトンについて読みましたが、クラスの同じインスタンスを複数のスクリプトで別々に呼び出すことができるかどうか疑問に思います。例:

<?php
class Example {
    private $instance;
    private $A;

    public function __construct() {}
    public function __clone() {}
    public function singleton() {
        if (self::$instance === null) {
             self::$instance = new Example;
        return self::$instance;
    }
    public function setA($val) {
        $this->A = $val;
    }
    public function getA() {
        return $this->A;
    }
}
?>

script_a.php:

<?php
include_once('example.class.php');
Example::singleton()->setA(10);
?>

script_b.php:

<?php
include_once('example.class.php');
echo Example::singleton()->getA();
// Would this output 10?
?>

また、静的関数はスクリプト実行の最後にメモリから削除されると読みましたが、これはシングルトンにも当てはまりますか? もしそうなら、上記を実現する方法はありますか?

4

3 に答える 3

0

シングルトンは、複数のリクエストにわたって状態を保持しません。そのためには、セッションを使用する必要があります。セッションを使用すると、シングルトン パターンを使用しても意味がありません。

非常に簡単な解決策:

script_a.php:

<?php
session_start();
$_SESSION['A'] = 10;
?>

script_b.php:

<?php
session_start();
if(isset($_SESSION['A'])) {
    echo $_SESSION['A'];
    // do the rest of processing
}
?>

複数のクライアント間でデータを共有しない場合、セッションは問題ありません (単一のクライアント - 複数の要求に適しています)。
クライアント間で共有される複数のリクエストで状態を保持する別の方法は、キャッシングです (スカラー、配列、データベース接続、またはオブジェクトをキャッシュできます)。そのためには、このリンクで詳細を確認してください。

于 2013-08-12T18:46:22.093 に答える