5

次のようなプライベート静的メンバーを持つアプリケーションで宣言されたクラスがあります。

class SomeClass{
private static myMember =  array(); 

public static getterFunction(){}
public static setterFunction(){}

}

私の質問/懸念は、複数のリクエスト(Javaのスレッドのように考えています)がこの静的メンバーを変更できることです。phpスコープと静的メンバーについての私の理解は、それらがリクエストスコープ内にあり、新しいリクエストごとに新しい変数が作成され、リクエストが実行された後に破棄されるということです。とは言うものの、これはテストするのが難しいことになるので(少なくとも簡単な方法は考えられません)、後悔するよりは安全だと思います。

私の評価は正しいですか?私が読んだPHPドキュメントは、詳細に関してはかなりくだらないので、まだ正式に答えることができませんでした...

4

2 に答える 2

5

明示的に作成しない限り(たとえば、セッション、データベース、ファイル、共有メモリを使用して)、PHPスクリプトのさまざまなインスタンス間で永続化または共有されるデータはありません各PHPインスタンスは独自のものであり、新しいリクエストごとにWebサーバーは個別のインスタンスを開始します。

そうです、あなたは正しいです。

于 2012-12-13T18:00:45.123 に答える
0

PHPでは、デフォルトで共有メモリはありません。すべてのリクエストは別々のプロセスで処理されているため、お互いを知りません。

私はあなたの質問を正しく理解したと思います。

例えば:

GETパラメータが渡されたときにクラスにプライベートフィールドを設定する単純なscript.phpファイルがあります。

<?
class A {
  private $x = 1;
  public function setX($x) {$this->x = $x;}
  public function getX() {return $this->x;}
}

$a = new A();
if (!empty($_GET['x'])) {
  $a->setX($_GET['x']);
  sleep(3);
}

echo $a->getX();
?>

一度に2つのリクエストを実行します。

GET /script.php?x=5
GET /script.php

2番目のリクエストは「1」を出力します。はい。それで合っています!

于 2012-12-13T18:06:53.717 に答える