我有一个在我的应用程序中声明的类,它有一个像这样的私有静态成员:
class SomeClass{
private static myMember = array();
public static getterFunction(){}
public static setterFunction(){}
}
我的问题/担心是多个请求(我想像Java中的一个线程)将能够修改这个静态成员。我对php范围和静态成员的理解是它们在请求范围内,并为每个新请求创建一个新变量,并在请求完成后随后销毁。也就是说,这将是一个难以测试(至少我想不出一个简单的方法),所以我宁愿安全而不是抱歉。
我的评估是否正确?我读过的PHP文档在细节方面非常糟糕,所以我还没有能够权威地回答......
答案 0 :(得分:2)
没有数据, none ,在PHP脚本的不同实例之间是持久的或共享的,除非您明确地这样做(例如使用会话,数据库,文件,共享内存)。每个PHP实例都是它自己的东西,每个新请求都会导致web服务器启动一个单独的实例。
是的,你是对的。
答案 1 :(得分:0)
默认情况下,PHP中没有共享内存。每个请求都在单独的过程中处理,因此他们彼此不了解。
我希望我能正确理解你的问题。
例如:
你有一个简单的script.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”。是的,你是对的!