点击首页Nearhospitals按钮触发deg2rad参数类型错误求助
解决deg2rad()参数类型不匹配的警告问题
让我们一步步拆解这个问题,找到根源并修复它:
错误原因分析
这个警告的核心很明确:deg2rad()函数要求传入**数值类型(double/float)来完成角度转弧度计算,但你的nearhospital.php第20行代码里,给它传了一个字符串(string)**类型的值。而「Nearby Police station」功能正常,说明警局对应的后端代码里,传递给角度转换函数的参数是正确的数值类型,两者的差异就在这里。
排查步骤
- 定位问题代码:打开
nearhospital.php,找到第20行调用deg2rad()的代码,记录下它的参数变量名(比如$user_lat、$user_lng这类定位相关变量)。 - 检查参数来源:这个参数应该是前端调用定位功能后传递过来的经纬度值,对比警局功能的前端传参逻辑,确认:
- 前端是否把经纬度以纯数值形式发送(而不是带引号的字符串,或者包含非数字字符)
- 后端通过
$_GET/$_POST获取参数时,是否因为默认规则把数值转成了字符串
- 验证参数类型:在调用
deg2rad()之前,临时添加代码打印参数的类型和值,快速确认问题:
如果输出是// 替换成你的参数变量名 var_dump($user_lat); echo gettype($user_lat);string,那就是类型不匹配的实锤了。
修复方案
方案1:强制转换参数类型
在调用deg2rad()前,把字符串参数转成数值类型,这是最直接的修复方式:
// 方式1:用(double)强制转换 $rad_latitude = deg2rad((double)$user_lat); $rad_longitude = deg2rad((double)$user_lng); // 方式2:用floatval()更稳妥,自动处理非数字字符 $rad_latitude = deg2rad(floatval($user_lat)); $rad_longitude = deg2rad(floatval($user_lng));
方案2:增加参数校验(可选)
为了避免后续出现类似问题,可以在转换前先校验参数是否为有效数值:
if (!is_numeric($user_lat) || !is_numeric($user_lng)) { // 返回错误提示给前端,或者做其他异常处理 echo json_encode(['status' => 'error', 'msg' => 'Invalid location coordinates']); exit; } // 再进行类型转换和计算 $rad_latitude = deg2rad(floatval($user_lat));
方案3:对齐前端传参逻辑
如果警局功能的前端是把经纬度作为数值传递的,检查「Nearhospitals」的前端代码,确保传参格式一致(比如不要给数值加引号,或者避免在传递前把数值转成字符串)。
内容的提问来源于stack exchange,提问作者Azhar Saeed
相关产品推荐
相关产品推荐

