Inhaltsverzeichnis
回复讨论(解决方案)
Heim Backend-Entwicklung PHP-Tutorial php怎么实现动态传参数?

php怎么实现动态传参数?

Jun 23, 2016 pm 01:58 PM

先贴代码,代码精简了。

<?php class Cache{	public function get()	{			$invoker			= debug_backtrace();			$invoker_class		= $invoker[1]["class"];			$invoker_function	= $invoker[1]["function"]."_redirect";			$argus				= func_get_args();		        $invoker_class		= str_replace("Action","", $invoker_class);					D($invoker_class)->$invoker_function($argus);	}}?>
Nach dem Login kopieren

描述:
程序是在ThinkPHP开发,目的是把Cache的get方法接收的参数转发到指定的方法上,
最后一行:其中D方法是ThinkPHP自带的方法用的是单例模式。如果不加参数$argus是可以正常调用的。

问题:
现在想传递参数,比如get("name","age"),完整的传递到 D($invoker_class)->$invoker_function(“name”,"age")上,有什么办法。

call_user_func 看起来像是可以,不过看不出来怎么用。

求解。


回复讨论(解决方案)

call_user_func_array(array(D($invoker_class), $invoker_function), $argus);

call_user_func_array(array(D($invoker_class), $invoker_function), $argus);


哈哈,谢谢斑竹,发帖前测试一直不成功原来是因为call_user_func_array的第二个参数必须使用数组,如果不使用数组就会没有任何反映。。

最后完整的代码如下::代码烂,见谅。。
CacheModel.class.php Cache模型文件
<?php/** * Cache 模型,在一次HTTP请求生存周期中有效的Cache,一次请求结束,Cache就清除。都在内存中 * 应用场景如下:程序某个地方读取了全部的产品种类名称和id,在另一处也读取了全部的产品种类和id,这样会造成重复数据库查询和变量的空间分配 * 构造缘由:起初准备把Cache分散在每个具体的模型里,发现这样做不好控制.不如集中控制 * @author  caoyuanye * */class CacheModel extends  Model{	var $cache_arr;	/**	 * 	 * 每个模型的最小化的方法里使用	 * @param $pk	 */	public function get()	{		$invoker			= debug_backtrace();		$invoker_class		= $invoker[1]["class"];		$invoker_function	= $invoker[1]["function"];		$argus				= func_get_args();		$str 				= $this->caculate($argus);		$base_str			= md5($str);		if($this->cache_arr[$invoker_class][$invoker_function]["key"] == $base_str)		{			echo "命中cache 没有查询";			//命中cache			return $this->cache_arr[$invoker_class][$invoker_function]["value"];		}				$new_invoker_class		= str_replace("Model","", $invoker_class);		$new_invoker_function	= $invoker_function."_setCache";				$rs = call_user_func_array(array(D($new_invoker_class), $new_invoker_function), $argus);		$this->cache_arr[$invoker_class][$invoker_function]["key"] = $base_str;		$this->cache_arr[$invoker_class][$invoker_function]["value"] = $rs;		return $rs;	}	/**	 * 	 * 递归计算所有的参数,判定参数是否发生改变	 */	private function caculate(&$argus)	{		$str = "";		foreach ($argus as $key => $value)		{			if(is_array($value))			{				$str .= $this->caculate($argus[$key]);			}else{				$str .= $value;			}		}		return $str;	}	}?>
Nach dem Login kopieren


测试模型
TestModel.class.php
<?php/** * 测试模型 * @author  caoyuanye * */class TestModel extends Model{	var $cache;	function __construct()	{		//D方法单例模式,不用操心		$this->cache = D("Cache");	}		public function run($a,$b,$c)	{		return $this->cache->get($a,$b,$c);		}			public function run_setCache($a,$b,$c)	{		return "设定3参数预定值<br />";	}			public function run2()	{		return $this->cache->get();	}	public function run2_setCache()	{		return "设定空预定值<br />";	}}?>
Nach dem Login kopieren


测试用例
TestAction.class.php
<?php/** * 测试类,专门用来测试各种类 */class TestAction extends BaseAction{		public function test_function()	{		$test = D("Test");		echo $test->run("a","b","c");		echo $test->run("a","b","c");		echo $test->run("a","b","c");						$test2 = D("Test");		echo $test2->run("a","b","c");		echo $test2->run2();		echo $test2->run2();		echo $test2->run2();	}}?>
Nach dem Login kopieren



测试结果:
设定3参数预定值命中cache 没有查询设定3参数预定值命中cache 没有查询设定3参数预定值命中cache 没有查询设定3参数预定值设定空预定值命中cache 没有查询设定空预定值命中cache 没有查询设定空预定值
Nach dem Login kopieren


达到预定设想,,谢谢斑竹解答。

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) 11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium) Mar 03, 2025 am 10:49 AM

11 beste PHP -URL -Shortener -Skripte (kostenlos und Premium)

Einführung in die Instagram -API Einführung in die Instagram -API Mar 02, 2025 am 09:32 AM

Einführung in die Instagram -API

Arbeiten mit Flash -Sitzungsdaten in Laravel Arbeiten mit Flash -Sitzungsdaten in Laravel Mar 12, 2025 pm 05:08 PM

Arbeiten mit Flash -Sitzungsdaten in Laravel

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren Mar 04, 2025 am 09:33 AM

Erstellen Sie eine React -App mit einem Laravel -Back -Ende: Teil 2, reagieren

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests Mar 12, 2025 pm 05:09 PM

Vereinfachte HTTP -Reaktion verspottet in Laravel -Tests

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs Mar 14, 2025 am 11:42 AM

Curl in PHP: So verwenden Sie die PHP -Curl -Erweiterung in REST -APIs

12 Beste PHP -Chat -Skripte auf Codecanyon 12 Beste PHP -Chat -Skripte auf Codecanyon Mar 13, 2025 pm 12:08 PM

12 Beste PHP -Chat -Skripte auf Codecanyon

Ankündigung von 2025 PHP Situation Survey Ankündigung von 2025 PHP Situation Survey Mar 03, 2025 pm 04:20 PM

Ankündigung von 2025 PHP Situation Survey

See all articles