2012-04-03 18 views
2

私はCodeIgniterのにライブラリとしてアップsettedこの単純なキャッシュクラスを得た:解析エラー:T_PAAMAYIM_NEKUDOTAYIM

<?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 [..] 

Iグラムを二重点や静的関数に関連する何かがありますが、私はクラスの初心者ですから問題は何ですか?

+0

'予期しないT_PAAMAYIM_NEKUDOTAYIM' in ... ...どこですか?あなたは指定された行をハイライトしてください。 –

+0

There: 'if(!$ cache :: is_cached( 'statistics'))'です。 – Cyclone

+0

'$ this-> easy_cache'はどこに定義されていますか? – MichaelRushton

答えて

2

クラスインスタンスではなく、クラス名にはスタティックコール(::someMethod())を使用する必要があります。

Easy_cacheのすべてのメソッドが静的なので、あなたの代わりに

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

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

を行う必要がありますところで、あなたは、これはCodeIgniterのコードベースから来ていることを確信していますか?これは、静的および動的なコンテキストをミックス:

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

はIMO、クラスEasy_cacheはあなたがしようとしたように使用されるが、する必要があります。

    方法についての代わり ::
  • 使用->はすべてstaticのキーワードでを削除
  • 呼び出しますメソッド定義
  • (オプションですが推奨)Easy_cache()メソッドを__construct()
  • にリネームします。
+0

ありがとう、あなたはそれをすべて説明した:)。そしてあなたが正しいです、エラーはCodeIgniterコードベースから来ません - 編集されたタグ。ありがとうございました。 – Cyclone

3

スタティックコールを使用したインスタンスコールを混在させます。

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

あなたはどちらか($これを使用して)オブジェクトのコンテキスト内で作業し、または静的を実行している。..

$cache::store 

と同じ..

!$cache->is_cached(); 

する必要がありますコール(::)を使用します。それらを混在させることはできません。

+0

さて、ありがとう、しかし、私は二重点を使って使うことができる多くのクラスを見たのはどうして...なぜここでそれらを使うことができないのですか? – Cyclone

+0

ダブルコロン(別名Paamayim Nekudotayim)は静的メソッド/プロパティ用です。 " - >"は他のすべてのものです。しかし、 –

+0

'is_cached()'は静的です。だからうまくいくはずです。 – MichaelRushton