我正在学习PHP 并尝试继续学习更高级的“东西”我的讲座告诉我们,最好的学习方法之一是使用/浏览/浏览开源代码。
我正在检查一个开源项目的代码,并尝试稍微调整一下代码。
功能如下:
function calculateStats() {
global $mysqli, $weekStats, $playerTotals, $possibleScoreTotal;
//get latest week with all entered scores
$lastCompletedWeek = getLastCompletedWeek();
//loop through weeks
for ($week = 1; $week <= $lastCompletedWeek; $week++) {
//get array of games
$games = array();
$sql = "select * from schedule where weekNum = " . $week . " order by gameTime, gameID";
$query = $mysqli->query($sql);
while ($row = $query->fetch_assoc()) {
$games[$row['gameID']]['gameID'] = $row['gameID'];
$games[$row['gameID']]['homeID'] = $row['homeID'];
$games[$row['gameID']]['awayID'] = $row['visitorID'];
if ((int)$row['homeScore'] > (int)$row['visitorScore']) {
$games[$row['gameID']]['winnerID'] = $row['homeID'];
}
if ((int)$row['visitorScore'] > (int)$row['homeScore']) {
$games[$row['gameID']]['winnerID'] = $row['visitorID'];
}
}
$playerPicks = array();
$playerWeeklyTotals = array();
$sql = "select p.userID, p.gameID, p.pickID, p.points, u.firstname, u.lastname, u.userName ";
$sql .= "from picks p ";
$sql .= "inner join users u on p.userID = u.userID ";
$sql .= "inner join schedule s on p.gameID = s.gameID ";
$sql .= "where s.weekNum = " . $week . " and u.userName <> 'admin' ";
$sql .= "order by u.lastname, u.firstname, s.gameTime";
$query = $mysqli->query($sql);
while ($row = $query->fetch_assoc()) {
$playerPicks[$row['userID'] . $row['gameID']] = $row['pickID'];
$playerWeeklyTotals[$row['userID']][week] = $week;
$playerTotals[$row['userID']][wins] += 0;
$playerTotals[$row['userID']][name] = $row['firstname'] . ' ' . $row['lastname'];
$playerTotals[$row['userID']][userName] = $row['userName'];
if (!empty($games[$row['gameID']]['winnerID']) && $row['pickID'] == $games[$row['gameID']]['winnerID']) {
//player has picked the winning team
$playerWeeklyTotals[$row['userID']][score] += 1;
$playerTotals[$row['userID']][score] += 1;
} else {
$playerWeeklyTotals[$row['userID']][score] += 0;
$playerTotals[$row['userID']][score] += 0;
}
}
}
}
echo calculateStats();
当我调用该函数时,收到以下错误消息:
使用未定义的常数周 - 假定为'周'
使用未定义的常量胜利 - 假定为'胜利'
它为循环中的每个索引提供了相同的错误消息,其中不包含''(引号)
当我在循环中的常量之间添加''(引号)时,我得到一个未定义的索引错误
Use of undefined constant week - assumed 'week'
,我可以采取哪些步骤来纠正错误?global $weekStats, $playerTotals, $possibleScoreTotal;
?注意:为了防止代码在问题中变长,我想在函数$lastCompletedWeek = getLastCompletedWeek();
中添加第4行正常工作,即getLastCompletedWeek()
返回正确的结果,以便将正确的结果传递给{{1内部函数。
我希望我的问题有道理,如果您需要更多信息,请告诉我,非常感谢!
的链接答案 0 :(得分:1)
他们没有使用任何常量。
为什么他们在数组变量的循环中使用常量?
他们应该将[
{
id : 1,
title : "La danza del fuego",
author : "Mago de Oz",
album : "Finisterra",
genre : "Folk",
duration : 132132312321, // miliseconds
cover : "file:///sdcard/0/123.png",
blur : "file:///sdcard/0/123.png",
path : "/sdcard/0/la-danza-del-fuego.mp3"
}
]
放在引号中,但他们没有,PHP帮助了他们。
2.为什么我收到错误使用未定义的常量周 - 调用函数时假设'周',以及我可以采取哪些步骤来纠正它?
因为代码中没有这样的常量。见答案1
3.为什么以下变量被声明为全局全局$ weekStats,$ playerTotals,$ possibleScoreTotal; ?
糟糕的编程习惯。这些变量应该传递给函数。
要在数组上使用字符串索引,请将索引放在引号
中"week"
如果您已经定义了常量,则不需要引号
$array["greeting"]="hi";
但如果你继续尝试
define("greeting", "hi");
echo greeting;
PHP会认为anotherGreeting是一个常量,它会尝试查找并发出警告,然后它会试着通过认为你的意思来帮助你 $array[anotherGreeting]="Test";
当您获得 未定义索引 错误时,它们意味着您正在尝试访问阵列中尚不存在的数组索引。
答案 1 :(得分:1)
问题
为什么他们在数组变量的循环中使用常量?
为什么我收到错误使用未定义的常数周 - 假设&#39;周&#39;在调用函数时,我可以采取哪些步骤来纠正它?
week
之类的东西读作常量,如果某个常量在某个地方未定义,那么php会产生这个通知(它不是错误),为了解决这个问题你需要引用数组元素为什么以下变量被声明为全局全局$ weekStats,$ playerTotals,$ possibleScoreTotal;吗
答案 2 :(得分:0)
在函数
之前定义常量 define('week','week');
define('wins','wins');
define('name','name');
define('userName','userName');
define('score','score');