2

この単純なキャッシュ クラスを Codeigniter のライブラリとしてセットアップしました。

<?php

class Easy_cache {

    static public $expire_after;

    static function Easy_cache()
    {
        if ($this->expire_after == '')
        {
             $this->expire_after = 300;
        }
    }

    static function store($key, $value)
    {
        $key = sha1($key);
        $value = serialize($value);
        file_put_contents(BASEPATH.'cache/'.$key.'.cache', $value);
    }

    static function is_cached($key)
    {
        $key = sha1($key);
        if (file_exists(BASEPATH.'cache/'.$key.'.cache') && (filectime(BASEPATH.'cache/'.$key.'.php')+$this->expire_after) >= time())
            return true;

        return false;
    }

    static function get($key)
    {
        $key = sha1($key);
        $item = file_get_contents(BASEPATH.'cache/'.$key.'.cache');
        $items = unserialize($item);

        return $items;
    }

    static function delete($key)
    {
        unlink(BASEPATH.'cache/'.sha1($key).'.cache');
    }

}

私は今それを使いたいので、コントローラーでこれを使用しています(私は 経由でライブラリをロードしていますautoload.php):

class Main extends CI_Controller
{
    public function __construct()
    {

        parent::__construct();
    }

    public function index()
    {
        $cache = $this->easy_cache;
        if ( !$cache::is_cached('statistics') )
        {
            $data = array('data' => $this->model_acc->count());
            $cache::store('server_statistics', $data);
        }
        else
            $data = array('this' => 'value');

        $this->load->view('main', array('servers' => $this->servers->get()));
    }
}

そして、私はこのエラーが発生しています:

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in [..]

二重ドットと静的関数に関連するものだと思いますが、私はクラスの初心者なので、問題は何ですか?

4

2 に答える 2

3

インスタンス呼び出しと静的呼び出しを混在させます。

$cache = $this->easy_cache;
!$cache::is_cached

する必要があります..

!$cache->is_cached();

と同じ..

$cache::store

($this を使用して) オブジェクトのコンテキスト内で作業しているか、(:: を使用して) 静的呼び出しを実行しています。それらを混在させることはできません。

于 2012-04-03T15:08:43.080 に答える
2

::someMethod()クラス インスタンスではなく、クラス名でstatics 呼び出し ( ) を使用する必要があります。

のすべてのメソッドEasy_cacheは静的であるため、次のことを行う必要があります

Easy_cache::is_cached()
Easy_cache::store()

それ以外の

$cache::is_cached()
$cache::store()

ところで、これは CodeIgniter コードベースから来ていると確信していますか? これは、静的コンテキストと動的コンテキストを混合します。

static function Easy_cache()
{
    if ($this->expire_after == '')
    {
         $this->expire_after = 300;
    }
}

IMO、Easy_cacheあなたが試みたようにクラスを使用する必要がありますが、

  • メソッド呼び出し->の代わりに使用::
  • staticメソッド定義のすべてのキーワードを削除します
  • (オプションですが推奨)Easy_cache()メソッドの名前を__construct()
于 2012-04-03T15:10:16.410 に答える