所以,当我尝试从对象单例中获取数组列表时,我出现了这个错误。
这是CardType.php上的单身人士
class CardTypeAPIAccessor extends GuzzleClient
{
private $client;
public function __construct($client)
{
if($client instanceof GuzzleClient)
{
$this->client = $client;
}
else
{
$this->client = parent::getClient();
}
}
public function getCardTypes() {
$cardTypes = array();
try
{
$response = $this->client->get('admin/card/type',
['headers' => ['Authorization' => $_SESSION['login']['apiKey']]
]);
$statusCode = $response->getStatusCode();
// Check that the request is successful.
if ($statusCode == 200)
{
$error = $response->json();
foreach ($error['types'] as $type)
{
$cardType = new CardType();
$cardType->setCardTypeId($type['card_type_id']);
$cardType->setCategory($type['category']);
array_push($cardTypes, $cardType);
}
}
}
catch(RequestException $e)
{
//todo
echo $e->getRequest() . "</br>";
if ($e->hasResponse())
{
echo $e->getResponse() . "</br>";
}
}
return $cardTypes;
}
}
这是card_type.php上的代码
<?php
$cardTypes = $cardTypeAPIAccessor->getCardTypes();
foreach ($cardTypes as $cardType){
$Type = new CardType();
?>
<tr>
<!-- The error is here-->
<td class="numeric"><?php echo $Type->getCardTypeId($cardType['card_type_id']); ?></td>
<td class="numeric"><?php echo $Type->getCategory($cardType['category']); ?></td>
</tr>
错误说:不能使用CardType类型的对象作为数组
我的代码出错了吗?
谢谢
答案 0 :(得分:1)
看起来您已经获得了此行所需的所有值:
$cardTypes = $cardTypeAPIAccessor->getCardTypes();
所以在我看来,在你的循环中,你只需要:
foreach ($cardTypes as $cardType){
?>
<tr>
<td class="numeric"><?php echo $cardType->getCardTypeId(); ?></td>
<td class="numeric"><?php echo $cardType->getCategory(); ?></td>
</tr>
虽然这只是基于给定代码和缺少的CardType
类的猜测。但我不认为需要在循环中生成新对象。
答案 1 :(得分:1)
$cardType
变量是CardType类的实例,而不是数组。问题是当它是一个对象时,你正在使用它,就像它是一个数组一样。所以这个
$cardType['card_type_id']
应该是
$cardType->getCardTypeID()
答案 2 :(得分:0)
有时您的响应将变成基于对象的,无法轻松访问。用例,例如当您从某个控制器或任何第三方API中的其他控制器获取数据时。
因此您可以通过这种方式获取数据
$object->getData(1); // here 1 is for associated data form.
在我的用例中,当我尝试从其他控制器访问数据时,我面临着相同的问题。
$attendanceController = new AttendanceController();
$offDayData = $attendanceController->getAttendanceOffDays($req);
return $offDayData->getData(1)['response'];
当您尝试从 Controller类获取数据时,响应将以另一种方式包装。因此您必须使用 getData(1)方法访问该响应。在我的解决方案中,我使用了。它在所有情况下都可以工作,那么您想从不同的地方获取数据 ControllerCalss