繁体   English   中英

PHP静态类成员范围

[英]PHP static class member scope

首先,我来自Java背景。

PHP中静态类成员的范围是什么? 即:请求,会话,服务器生命周期等

我目前的理解是,除非卡在会话中,否则一切都是请求 我在《 语言指南》中找不到任何要驳斥或确认的内容。

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)

情况二

如果我要访问包含此代码且查询行中为?NO_SPRINKLES=true的页面,我应该看到

bool(false)

情况3

如果我在查询行中访问带有?NO_SPRINKLES=true的页面,然后访问没有它的页面, 我应该始终看到 bool(true) 对吗?

案例4

使用?NO_SPRINKLES=true 访问页面后其他访问该页面的人仍然应该看到 bool(true) 正确吗?

除非您使用会话,否则PHP不会保留任何信息。 因此,在加载页面时,会在代码的开头创建一个变量,并在发送代码时在代码的末尾销毁一个变量。

与类及其成员相同。 您可以根据需要进行任意编辑,它将保留信息,但是在脚本的最后,它将丢失。

这与PHP无关,而与HTTP请求-响应周期有关。 请参阅,HTTP被明确定义为无状态协议。 这意味着每个新请求都会被处理,因为之前没有任何内容(之后也没有任何内容,但这听起来太悲观了)。

是的,有几种减少这种“无状态性”的机制-cookie(存储在客户端); 使用cookie或某些参数作为存储在服务器端的信息的键的会话。 但总的来说,您的理解是非常正确的:仅PHP使用的每个实体(未存储在DB /文件或会话中)的时间跨度只是一个Request

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM