Невозможно использовать объект типа stdClass в качестве массива - PullRequest
0 голосов
/ 01 марта 2012

Прежде всего, я не фанат Php .. поэтому извините мои небольшие знания о PHP. Я использую AMFPHP2 с Flex на веб-интерфейсе. Я могу извлекать данные из серверной части как типизированные объекты, но когда я пытаюсь сохранить, у меня возникает эта проблема, как показано ниже:

<br /><b>Fatal error</b>:  Cannot use object of type stdClass as array in <b>/mnt/array1/share/htdocs/htdocs/admin/application/amf/services/Item.php</b> on line <b>88</b><br />

Ниже приведен код, выдающий эту ошибку:

Line86    public function saveCollection($collection) {
Line87        for ($i=0; $i<count($collection); $i++) {
Line88            $this->saveItem($collection[$i]);
Line89        }
Line90    }

Ниже приведены мои классы VO: ItemVO.php

class ItemVO {
..
..
var $_explicitType = "ItemVO";
..
..
}

ItemVO.as

package models.vo {
    [RemoteClass(alias="ItemVO")]  
    public class ItemVO {
...
...
    }
}

Вот моя структура папок:

-root/
------*.html
------*.swf
------application/
-----------------amf/
--------------------/index.php
--------------------/models/vo/all vo files
--------------------/services/all services
-----------------libraries/
--------------------------/Amfphp/

Вот мой index.php

<?php
require_once dirname(dirname(__FILE__)) . '/libraries/Amfphp/ClassLoader.php';
$config = new Amfphp_Core_Config();
$config->serviceFolderPaths = array(dirname(__FILE__) . '/services/');
$voFolders = array(dirname(__FILE__) . '/models/vo/');
$customClassConverterConfig = array(‘customClassFolderPaths’ => $voFolders);
$config->pluginsConfig['AmfphpCustomClassConverter'] = $customClassConverterConfig;
$gateway = Amfphp_Core_HttpRequestGatewayFactory::createGateway($config);
$gateway->service();
$gateway->output();
?>

Любая помощь будет принята с благодарностью. Спасибо.

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

Сообщение об ошибке самоочевидно. Вы можете использовать, например, это:

public function saveCollection($collection) {
 foreach ($collection as $value) {
          $this->saveItem($value);
       }
   }
3 голосов
/ 01 марта 2012

Мое основное понимание ошибки заключается в том, что вы пытаетесь получить доступ к объекту, как к массиву.

Это обычно означает, что вы делаете $something['something'] вместо правильного $something->something.

Является ли параметр $collection в saveCollection массивом или объектом?

Попробуйте заменить строку 88 на:

 $this->saveItem($collection->$i);

Редактировать -

Как я только что понял в комментариях, это все равно не должно работать, потому что вы пытаетесь сосчитать stdClass.Использование for each должно помочь, как кто-то другой упомянул в ответе.

0 голосов
/ 01 марта 2012

Вы ссылаетесь на stdClass объект , как массив , эти два понятия не одно и то же. Для вашей цели вы можете преобразовать его в массив:

public function saveCollection($collection) {
    $collection = (array)$collection;
    for ($i=0; $i<count($collection); $i++) {
        $this->saveItem($collection[$i]);
    }
}

ПРИМЕЧАНИЕ: приведение объекта в виде массива не всегда работает, но, поскольку похоже, что вы ожидаете передачи структуры, подобной массиву, вероятно, она будет работать нормально.

...