我怀疑是解决这个问题的最好方法:
我想要做的是能够调用一个方法,首先验证我需要的数据是否在缓存上,然后如果不可用则执行我在原始方法中定义为参数的回退方法。
public function index() {
$data['some_cache'] = $this->get_cache('cache_key', $this->get_list_something('entered fallback method'));
}
public function get_cache($key, $fallback_function) {
$data = FALSE;
if ( ! empty($key)) {
$data = $this->cache($key);
if (empty($data)) {
$data = $fallback_function;
}
}
return $data;
}
public function cache($key) {
// try to find something on cache list (either memory cache / file cache) I just return FALSE to fail on purpose
return FALSE;
}
public function get_list_something($param) {
return $param;
}
我可以将方法名称作为字符串发送,将参数作为数组发送,然后使用call_user_func_array调用它(导致get_cache方法发生更改)。
所以我的问题归结为:这是一个好习惯吗?我可以遇到哪些问题?
感谢您的帮助。
答案 0 :(得分:0)
试试这个,user_call_method()或user_call_function()
我假设你在这里使用的是一个类方法,而不是基于$ this
的使用的常规函数所以试试这个,也许你会从中得到一些想法。
<?php
class test {
public function index() {
$data['some_cache'] = $this->get_cache('cache_key', 'get_list_something','test','test2');
return $data['some_cache'];
}
public function get_cache($key, $fallback_function) {
$data = FALSE;
if ( ! empty($key)) {
$data = $this->cache($key);
$args = func_get_args(); // Dynamically Pass Arguments optional
unset($args[0]); unset($args[1]); // Unset the cach_key, and method name get_list_something
if ($data==false) {
$data = @call_user_method($fallback_function,$this,$args);
}
}
return $data;
}
public function cache($key) {
$flag = false;
$words = ($flag)?'true':'false';
echo 'cache returning <b>'.$words.'</b>, testing <b>fallback_function</b><br>';
return $flag;
}
public function get_list_something(&$args) {
$params = implode(',',$args);
echo 'running <b>fallback_function</b><br>';
return $params;
}
}
$test = new test();
echo $test->index();
?>