2012-03-01 25 views
0

まず、PHPのオタクではありません。 フロントエンドでAMFPHP2をFlexで使用しています。 型付きが細かいオブジェクトとして私は、バックエンドからデータを取得することができますが、私が保存しようとすると、私は以下のように、この問題が生じています:以下配列としてstdClass型のオブジェクトを使用することはできません

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

:以下

<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 /> 

コードはこのエラーを投げています私のVOクラスは、次のとおりです。 ItemVO.php

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

ItemVO.as

ここで

が私のフォルダ構造である:ここで

-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(); 
?> 

すべてのヘルプは大歓迎されます。おかげさまで

+0

です。var_dump($ collection)を87行目で試してみると、問題が発生する可能性があります。 –

+0

変数全体をダンプするよりも、特に非常に大きい場合は、gettype($ collection)とするより良い解決策です。 – OpenSorceress

+0

PHP側のように見えますが、ArrayCollectionsを処理できません。ArrayCollectionsではなくclientsideからArrayを送信してコードを試しましたが、そのまま動作しました。すべての入力に感謝します。 –

答えて

3

エラーメッセージは自己説明的です。 これは

+0

私はすでにそれを試みていました。エラーは "$ this-> saveItem($ value);"のままです。 line –

+0

同じエラーまたは別のエラー? $コレクションには何が含まれていますか? –

+0

クライアント側FlexコードからsaveCollection(updateItems)が_remote.saveCollection(updateItems)として呼び出されています。 _remoteはクライアントサイドのRemoteObjectで、updateItemsはTypedオブジェクトのArrayCollectionです。ありがとう。 –

3

エラーの基本的な理解は、オブジェクトが配列であるかのようにオブジェクトにアクセスしようとしていることです。

これは、通常、正しい$something->somethingの代わりに$something['something']を実行していることを意味します。

saveCollection$collectionパラメータは、配列またはオブジェクトですか? - 私はちょうどコメントで実現として、あなたはstdClassをカウントしようとしているため

、それはとにかく動作しないはずです

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

編集:

はとライン88を交換してみてください。 for eachを使用すると、回答で言及された他の人のように、このトリックを行う必要があります。

+0

オブジェクトで 'count'を呼び出すことはできません...できますか? – Travesty3

+0

@ Travesty3 'stdClass'は' Countable'インターフェースを実装していません。そのような場合、 'count'は常に1を返します。 'count((array)$ stdObj)' –

+0

あなたのソリューションのOPのコードのその部分に対処していないことを指摘しておきました。彼が変更する必要があるのは、コードがforループ内にあることだけですが、forループ自体の終了条件も変更する必要があることを提案しました。あなたの答えを修正したいかもしれません。 – Travesty3

0

次の2つは同じものではありません配列、同じようstdClassオブジェクトを参照しています。

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

注:あなたの目的のために、あなたは配列としてそれをキャストすることができるかもしれ配列としてオブジェクトをキャストすることは常に動作しませんが、それはあなたが、アレイ状の構造を期待しているように見えるので、渡されると、おそらく正常に動作します。

関連する問題