2016-07-05 197 views
0

我正在與API集成,需要創建對象以提交給API服務器。創建動態命名對象

我可以寫下面

$objBedroom1 = $objRequest->property->details->rooms()->create(); 
$objBedroom1->room_name = "Bedroom1"; 
print_r($objBedroom1) ; 

$objBedroom2 = $objRequest->property->details->rooms()->create(); 
$objBedroom2->room_name = "Bedroom2"; 
print_r($objBedroom2) ; 

等,但德臥室並不總是設置爲3,他們可能是不超過5,所以我希望能夠通過臥室的#迭代並創建一個對象爲每個但問題是,如果我嘗試以下方法...

$bedz = 3;//or set by the database variable as an int 

for ($i=0; $i < $bedz; $i++) { 
    $objBedroom.$i = $objRequest->property->details->rooms()->create(); 
    $objBedroom.$i->room_name = "Bedroom.$i"; 
    print_r($objBedroom.$i) ; 
} 

PHP的錯誤未定義的變量:objBedroom回來

這似乎是我不能CREA一個$ objBedroom加上一個可變數字。

任何幫助表示讚賞

問候 基思

老狗努力學習新的技巧!

+0

'$ objBedroom. $ i'是無效的PHP。您可以創建一系列臥室對象;即g:'$ objBedroom = $ objRequest-> property-> details-> rooms() - > create(); $ objBedroom-> room_name ='foo'; $ bedrooms [] = $ objBedroom;'我的問題首先是,你將如何處理這些對象 - 你將它們添加到父對象還是其他東西? –

回答

0

使用數組代替動態變量名稱。

$bedrooms = array(); // or $bedrooms = []; for PHP v5.4+ 
$bedz = 3; // or set by the database variable as an int 

for ($i = 0; $i < $bedz; $i++) { 
    $bedroom = $objRequest->property->details->rooms()->create(); 
    $bedroom->room_name = "Bedroom." + $i; 

    $bedrooms[] = $bedroom; // append new bedroom 
} 

var_dump($bedrooms); 
1

爲了您的代碼正常工作,$objBedroom需要是一個數組。正確的數組語法訪問第i個元素是

$objBedroom[$i]

$objBedroom.$i

第二個語法是,第一無效,因爲沒有點操作後一個美元符號,但也告訴PHP將$objBedroom視爲對象,而不是數組。代碼失敗,因爲當使用點運算符訪問對象的字段時(.),變量必須引用對象。

對於數組工作,你可以像這樣把它聲明:

$objBedroom = array();

但是,這是沒有必要的,它只是很高興有使你的代碼更容易理解。

解決你的問題只是改變你的代碼使用正確的數組語法,你會被罰款:

$bedz = 3;//or set by the database variable as an int 

for ($i=0; $i < $bedz; $i++) { 
    $objBedroom[] = $objRequest->property->details->rooms()->create(); 
    $objBedroom[$i]->room_name = "Bedroom.$i"; 
    print_r($objBedroom[$i]) ; 
} 

聲明的語法如下:

$objBedroom[] = $objRequest->property->details->rooms()->create();

你沒有明確指定索引。這告訴PHP推動陣列中的房間,所以第一個房間將被放置在$objBedroom[0],第二個在$objBedroom[1],e.t.c自動

+1

絕對傳奇!謝謝你的全面解答dimlucas。它非常有意義。作品一種享受。每一天都是學校的一天 –