如何在PHP类中维护静态成员状态?

时间:2016-09-17 20:37:36

标签: php static

在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主机服务)中是否仍有办法实现此目的?

1 个答案:

答案 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 />

评估代码:https://3v4l.org/WF4QA

但是如果你想在脚本执行之间存储self::$URLS_CACHE - 使用数据库,文件,键值存储等存储。