致命错误:不能将类型的对象用作数组

时间:2014-12-12 20:35:10

标签: php arrays object

所以,当我尝试从对象单例中获取数组列表时,我出现了这个错误。

这是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类型的对象作为数组

我的代码出错了吗?

谢谢

3 个答案:

答案 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