让我先说一下,我来自Java背景。
PHP中静态类成员的范围是什么? 即:请求,会话,服务器生命周期等
我目前的理解是,一切都是请求,除非它被卡在会话上。我在Language Guide中没有发现任何反驳或证实此事的内容。
class MyKlass {
public static $K_PAGE_SIZE = 50;
public static $K_WITH_SPRINKLES = true;
}
if (isset($_GET['NO_SPRINKLES'])) {
MyKlass::$K_WITH_SPRINKLES = false;
}
var_dump(MyKlass::$K_WITH_SPRINKLES);
案例1
如果我要访问一个包含此代码的页面,查询行中没有任何内容,我应该看到
bool(true)
案例2
如果我在查询行中使用此代码和?NO_SPRINKLES=true
访问该页面,我应该看到
bool(false)
案例3
如果我在查询热线中访问了包含?NO_SPRINKLES=true
的网页,然后访问了没有它的网页,我应该总是看到 bool(true)
对吗?
案例4
使用?NO_SPRINKLES=true
访问该网页后,访问该网页的其他人仍应看到 bool(true)
正确吗?
答案 0 :(得分:5)
除非您使用会话,否则PHP不会保留任何信息。因此,当您加载页面时,会在代码的开头创建一个变量,并在代码结束时将其发送出去。
与班级及其成员相同。你可以根据需要编辑它们,它会保留信息,但是在你脚本的最后,它会丢失。
答案 1 :(得分:1)
这不是关于PHP,而是关于HTTP请求 - 响应周期。请参阅,HTTP具体定义为无状态协议。这意味着每个新请求都会被处理,因为它之前什么也没有(之后什么都没有,但听起来太悲观了)。
是的,有几种机制可以减少这种'无国籍状态' - 存储在客户端的cookie;会话,使用cookie或一些参数作为存储在服务器端的信息的密钥。但总的来说,你的理解是非常正确的:PHP使用的每个实体的时间跨度(不存储在DB /文件或会话中)只是请求。