2016-09-17 61 views
0

Javaでは、静的メンバーはクラスのすべてのインスタンスの値を保持します。これはPHPで行うことができますか?私は数年前にこの問題にぶつかったことを覚えています。現在のテストでは、静的メンバーはその状態を維持していないことが確認されています。だから私は、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>'; 
     } 
    } 

} 

出力(私は、単一のキー=>値を取得するたびに)

caching test33 as 33 
Cache content: 
Key: test33 Value: 33 

私は、PHPでJVMという概念を持っていないことを理解しています。 PHPの標準インストール(これはcPanelで標準的なVPSホスティングサービス)でこれを行う方法はまだありますか?

+0

PHPクラスはコンパイルされておらず、永続的ですが、これは記憶媒体のためのものです。 – Blake

+0

'$ URL_CACHE'と' self :: $ URL_CACHE'は__different__変数です。 –

+0

私はself :: $ URL_CACHEとCache :: $ URL_CACHEを両方の場所で試しましたが、運はありませんでした。 – jacekn

答えて

0

スクリプトの実行中に、クラスのすべてのインスタンスが静的変数にアクセスし、それを変更できます。 evalの上

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

コード:

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'); 

出力は次のようになります

は、ここでのテスト($URL_CACHEをアクセスしてるときself::に注意してください)ですhttps://3v4l.org/WF4QA

しかし、あなたはself::$URLS_CACHEを保存したい場合はスクリプトの実行 - use storデータベース、ファイル、キーバリューストレージなどあらゆるものがあります。

関連する問題