PHP 函数调用时传引用的问题

晚上下载了腾讯开放平台的 SDK ,PHP 版本的,我发现自己接触一个新的 API 的时候总是喜欢从 PHP 的 SDK 开始看起,这算哪门子的事啊。

SDK 跑起来后 PHP 报了一个警告

Deprecated: Call-time pass-by-reference has been deprecated in D:Documentscodewampwwwopen_qqPHP_SDK_V3.0.2Test_OpenApiV3.php on line 35

看回代码,调用函数的 35 行是这样的

$ret = get_user_info(&$sdk, $openid, $openkey, $pf);

找到函数的定义

function get_user_info($sdk, $openid, $openkey, $pf)
{
	$params = array(
		'openid' => $openid,
		'openkey' => $openkey,
		'pf' => $pf,
	);

	$script_name = '/v3/user/get_info';

	return $sdk->api($script_name, $params);
}

可以看到,函数定义的时候是传值的参数方式的,但是使用的时候传了引用,google 一阵搜,基本上都是建议在配置中把这个警告关掉,眼不见为净,但是既然人家 deprecated 了,那么肯定是有道理的,继续查了一会,终于找到说法解释:PHP 并不是不建议使用传引用的方式调用函数,毕竟 resource 类的变量是不好复制传值的,但是不应该在定义的时候不说明而仅仅在使用的时候传引用,对于需要使用传引用的变量,应该在函数定义的时候明确的说明,至于在使用的时候,倒不用取引用了,这点应该是从封装的思想去理解的,于是代码应该更改如下

function get_user_info(&$sdk, $openid, $openkey, $pf)
{
	$params = array(
		'openid' => $openid,
		'openkey' => $openkey,
		'pf' => $pf,
	);

	$script_name = '/v3/user/get_info';

	return $sdk->api($script_name, $params);
}
$ret = get_user_info($sdk, $openid, $openkey, $pf);

不用屏蔽,异常自然的消失了

Leave a Reply

Your email address will not be published. Required fields are marked *