在Java中,静态成员为类的所有实例维护其值。这可以用PHP完成吗?我记得几年前遇到过这个问题,我目前的测试证实静态成员没有保持其状态。所以我想,在PHP中,一个类被卸载,并且在每次请求后都会销毁它的所有状态。
的index.php
include('cache.php');
$entityId=date('s');
$uri='page'.$entityId;
$cache = new Cache();
$cache->cacheUrl($uri, $entityId);
cache.php
class Cache {
private static $URL_CACHE;
public function cacheUrl($url, $entityId) {
echo '<br>caching '.$url.' as '.$entityId;
$URL_CACHE[$url]=$entityId;
echo '<br>Cache content:<br>';
foreach ($URL_CACHE as $key => $value) {
echo 'Key: '.$key.' Value: '.$value.'<br>';
}
}
}
输出(每次我获得一个Key =&gt; Value)
caching test33 as 33
Cache content:
Key: test33 Value: 33
我知道我们在PHP中没有JVM的概念。在PHP的标准安装(具有cPanel的典型VPS主机服务)中是否仍有办法实现此目的?
答案 0 :(得分:0)
在脚本执行期间,所有类的实例都可以访问静态变量并可以更改它。
以下是一项测试(注意事项self::
时注意$URL_CACHE
):
class Cache {
private static $URL_CACHE;
public function cacheUrl($url, $entityId) {
echo '<br>caching '.$url.' as '.$entityId . '<br />';
self::$URL_CACHE[$url]=$entityId;
echo '<br>Cache content:<br>';
foreach (self::$URL_CACHE as $key => $value) {
echo 'Key: '.$key.' Value: '.$value.'<br />';
}
}
}
$cache = new Cache();
$cache->cacheUrl('uri1', 'ent1');
$ya_cache = new Cache();
$ya_cache->cacheUrl('uri2', 'ent2');
输出类似于:
<br>caching uri1 as ent1<br />
<br>Cache content:<br>Key: uri1 Value: ent1<br />
<br>caching uri2 as ent2<br />
<br>Cache content:<br>Key: uri1 Value: ent1
<br />Key: uri2 Value: ent2<br />
但是如果你想在脚本执行之间存储self::$URLS_CACHE
- 使用数据库,文件,键值存储等存储。