创建动态命名对象

问题描述:

我正在与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;'我的问题首先是,你将如何处理这些对象 - 你将它们添加到父对象还是其他东西? –

使用数组代替动态变量名称。

$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); 

为了您的代码正常工作,$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。它非常有意义。作品一种享受。每一天都是学校的一天 –