PHP 和并发中的静态成员的范围



我有一个在我的应用程序中声明的类,它有一个私有静态成员,如下所示:

class SomeClass{
private static myMember =  array(); 
public static getterFunction(){}
public static setterFunction(){}
}

的问题/担忧是多个请求(我的想法就像 Java 中的线程)将能够修改这个静态成员。 我对 php 范围和静态成员的理解是,它们在请求范围内,为每个新请求创建一个新变量,并在请求完成后销毁。 也就是说,这将是一件很难测试的事情(至少我想不出一个简单的方法),所以我宁愿安全而不是后悔。

我的评估正确吗? 我读过的 PHP 文档在细节方面非常糟糕,所以我还没有能够权威地回答......

没有数据(无)是持久的,或者在 PHP 脚本的不同实例之间共享,除非您明确这样做(例如使用会话、数据库、文件、共享内存)。每个PHP实例都是它自己的东西,每个新请求都会导致Web服务器启动一个单独的实例。

所以是的,你是对的。

在 PHP 中,默认情况下没有共享内存。每个请求都在单独的进程中处理,因此它们彼此不了解。

我希望我正确理解了你的问题。

例如:

您有一个简单的脚本.php文件,该文件在传递 GET 参数时在类中设置私有字段:

<?
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();
?>

您一次执行两个请求:

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

第二个请求将打印"1"。是的,你是对的!

最新更新