목차
回复讨论(解决方案)
백엔드 개발 PHP 튜토리얼 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);	}}?>
로그인 후 복사

描述:
程序是在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;	}	}?>
로그인 후 복사


测试模型
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 />";	}}?>
로그인 후 복사


测试用例
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();	}}?>
로그인 후 복사



测试结果:
设定3参数预定值命中cache 没有查询设定3参数预定值命中cache 没有查询设定3参数预定值命中cache 没有查询设定3参数预定值设定空预定值命中cache 没有查询设定空预定值命中cache 没有查询设定空预定值
로그인 후 복사


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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

2025 PHP 상황 조사 발표 2025 PHP 상황 조사 발표 Mar 03, 2025 pm 04:20 PM

2025 PHP 상황 조사 발표

See all articles