[英]Catchable fatal error: Argument 1 passed to … must be an instance of …, boolean given, called in … on line … and defined in … on line
[英]PHP Catchable fatal error: Argument 1 passed to must be of the type array, null given, called in on line 208 and defined
我一直面临着一个无法解决的怪异问题。 长话短说,当我在自己创建的游戏中加入迷你游戏时,一切都很好! 但是当我退出迷你游戏时,它应该把我送回房间,但是却给了我一个错误。
这是错误:
PHP可捕获的致命错误:传递给Sweater \\ Server :: leaveTable()的参数1必须为数组类型,给定字符串,在第208行的/usr/share/nginx/Sweater/Sweater/GameHandler.php中调用,并在/中定义第184行的usr / share / nginx / Sweater / Sweater / GameHandler.php
在问这个问题之前,我做了一些研究,并尝试了遇到的解决方案,但遗憾的是它们没有用。
GameHandler.php handleLeaveTable:
function handleLeaveTable(Array $arrData, Client $objClient) {
$intPlayer = $arrData[0];
$this->leaveTable($intPlayer); // Line 208
}
GameHandler.php LeaveTable:
function leaveTable(Array $arrData, Client $objClient) { // Line 184
$intPlayer = $arrData[4];
$tableId = $intPlayer->tableId;
if($tableId !== null) {
$seatId = array_search($intPlayer, $this->playersByTableId[$tableId]);
$opponentSeatId = $seatId == 0 ? 1 : 0;
if(isset($this->playersByTableId[$tableId][$opponentSeatId])) {
$this->playersByTableId[$tableId][$opponentSeatId]->addCoins(10);
}
unset($this->playersByTableId[$tableId][$seatId]);
unset($this->tablePopulationById[$tableId][$intPlayer->$strUsername]);
$objClient->sendXt('ut', $objClient->getIntRoom(), $tableId, $seatId);
$intPlayer->tableId = null;
if(count($this->playersByTableId[$tableId]) == 0) {
$this->playersByTableId[$tableId] = array();
$this->gamesByTableId[$tableId] = null;
}
}
}
这是什么问题? 我检查了所有内容,无法解决。
编辑$ arrData是什么:
function decodeData($strData){
$arrData = simplexml_load_string($strData, 'SimpleXMLElement', LIBXML_NOCDATA);
if($arrData === false){
throw new Exceptions\HandlingException('Unable to parse client\'s XML data');
}
$arrData = json_decode(json_encode((array)$arrData), true);
return $arrData;
}
function handleData($strData, $objClient){
$arrData = explode($this->arrConfig['Packets']['Delimiter'], $strData);
array_pop($arrData);
foreach($arrData as $strData){
Silk\Logger::Log('Received data: ' . $strData);
$strSubstring = substr($strData, 0, 1);
$blnPossibleXML = $strSubstring == '<' ? true : false;
$blnPossibleGame = $strSubstring == '%' ? true : false;
if($blnPossibleXML === false && $blnPossibleGame === false){
throw new Exceptions\HandlingException('Bad client detected!');
}
$blnPossibleXML ?
$this->handleXMLData($strData, $objClient):
$this->handleGameData($strData, $objClient);
}
unset($arrData);
}
PHP可捕获的致命错误:传递给Sweater \\ Server :: leaveTable()的参数1必须为数组类型,给定字符串,在第208行的/usr/share/nginx/Sweater/Sweater/GameHandler.php中调用,并在/中定义第184行的usr / share / nginx / Sweater / Sweater / GameHandler.php
从$arrData
,获取第一个元素,它是字符串
$intPlayer = $arrData[0];
$this->leaveTable($intPlayer); // Line 208
在GameHandler.php handleLeaveTable:
您将第一个元素形成数组
然后在GameHandler.php leaveTable:
中GameHandler.php leaveTable:
您正在尝试将该元素作为数组访问,然后采用第5个元素
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.