调用getTemperature()函数报错及页面仅显示'['的问题求助
解决PHP调用forecast.io时的两个问题:仅显示'['和调用getTemperature()致命错误
嘿,同学,别慌!大一刚接触编程遇到这些问题太正常了,咱们一步步拆解来解决:
先搞定致命错误:Fatal error: Uncaught Error: Call to a member function getTemperature()
这个错误的核心是:你试图调用getTemperature()方法的变量不是一个有效的对象,大概率是你没正确初始化forecast.io的类,或者获取天气数据的步骤失败了。给你几个具体的排查和修复步骤:
补全类的实例化代码
你现在只include了forecast.io.php,但还没创建这个类的实例,也没调用获取数据的方法。得加上这些关键代码:// 实例化ForecastIO类,传入你的API密钥 $forecast = new ForecastIO($apiKeyParam); // 设置单位(没传参数就用默认的us) $forecast->setUnits($unitsParam ?: 'us'); // 如果传了语言参数,也设置上 if (!empty($langParam)) { $forecast->setLang($langParam); } // 获取指定经纬度的天气数据 $weatherData = $forecast->getForecast($latParam, $lonParam);检查数据获取是否成功
调用getForecast()后,一定要先判断是否拿到了有效数据,不然直接调用方法肯定报错:if (!$weatherData) { die('获取天气数据失败啦!请检查你的API密钥是否正确,经纬度是不是数字格式,还有服务器能不能正常访问外网~'); }正确调用getTemperature()
这个方法属于currently(当前天气)对象,得这么写:$currentTemp = $weatherData->currently->getTemperature();
再解决网页仅显示'['的问题
这个情况一般是脚本执行到一半报错中断,导致只输出了部分内容(比如你打算输出JSON,但只输出了开头的[就停了),或者输出方式不对。试试这些办法:
先开启错误显示
在代码最开头加上这两行,让PHP把所有错误都显示出来,这样你就能看到到底哪里出问题导致输出中断了:error_reporting(E_ALL); ini_set('display_errors', 1);规范JSON输出(如果是要输出JSON的话)
如果你想把天气数据以JSON格式输出,一定要用json_encode(),并且设置正确的响应头:// 把要返回的数据整理成数组 $result = [ 'temperature' => $currentTemp, 'location' => ['lat' => $latParam, 'lon' => $lonParam], 'units' => $unitsParam ?: 'us' ]; // 设置响应头为JSON类型 header('Content-Type: application/json'); // 编码成JSON并输出 echo json_encode($result);分步调试变量
新手调试别着急直接输出最终结果,每一步都用var_dump()看看变量是什么样的,比如:var_dump($forecast); // 看看实例化的类结构对不对 var_dump($weatherData); // 看看拿到的天气数据是什么结构
给你的新手小建议
- 仔细看看
forecast.io.php文件里的注释,类的作者肯定写了使用示例,跟着示例走准没错; - 测试的时候手动在浏览器地址栏拼好参数访问,比如
http://localhost/你的文件名.php?apiKey=你的密钥&lat=39.9&lon=116.3&units=us,确保参数都传对了; - 遇到报错先看错误信息的行号,定位到代码对应位置,大部分问题都能通过错误信息找到方向。
内容的提问来源于stack exchange,提问作者remy corbiere
相关产品推荐
相关产品推荐

