PEAR is discontinued

This is a static archive preserving historical releases and metadata. No new packages or updates will be published. For updates to existing packages, or to publish new packages, please use Composer and Packagist.

Home » Caching » Cache_Lite » Bug #660

Problem using Cache_Lite_Function's 'call' method and $this->method

Details

Submitted2004-02-01 11:45 UTC
Fromeikke at eikke dot com
StatusWont fix
PackageCache_Lite
PHP Version4.3.3
OSGNU/Linux 2.4
Roadmaps(Not assigned)

Comments

[2004-02-01 11:45 UTC] eikke at eikke dot com

Description:
------------
If I try to use PEAR::Cache_Lite's Cache_Lite_Function class in a class of mine, I cannot cache results of methode calls of that class itself (error on $this->_cache->call('this->_myFunction', 'arg1', 'arg2'))

These 2 possible solution do not work:
a) $tmp=$this;
$this->_cache->call('tmp->_myFunction', 'arg1', 'arg2');

b) $tmp=& $this;
$this->_cache->call('tmp->_myFunction', 'arg1', 'arg2');

Reproduce code:
---------------
<?php
require_once 'Cache/Lite/Function.php';
class myClass{
var $_cache;
function myClass(){
$options = array('caching' => true,
'cacheDir' => '../cache',
'lifeTime' => 1800);
$this->_cache = new Cache_Lite_Function($options);
}
function _myTest($a, $b){
return $a."+".$b."=".($a+$b);
}
function getResult($c, $d){
$ret=$this->_cache->call('this->_myTest', $c, $d);
return $ret;
}
}
$mc=new myClass();
echo $mc->getResult(1,2);
?>

Expected result:
----------------
1+2=3

Actual result:
--------------
Fatal error: Call to a member function on a non-object in /usr/local/lib/php/Cache/Lite/Function.php on line 103

[2004-02-07 13:34 UTC] fab at php dot net

I don't find any good solution.

But, a good workaround is :
<?php
(...)
function getResult($c, $d){
global $temp; // WITHOUT THIS, IT DOESN'T WORK
$temp = $this;
$ret=$this->_cache->call('temp->_myTest', $c, $d);
return $ret;
}
(...)
?>

[2004-10-12 20:04 UTC] dcech at phpwerx dot net

You can call it like:

$this->_cache->call(array(&$this,'myFunction'), 'arg1', 'arg2');

It will generate 2 notices but will work just fine.