创建动态命名对象
我正在与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加上一个可变数字。
任何帮助表示赞赏
问候 基思
老狗努力学习新的技巧!
使用数组代替动态变量名称。
$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自动
绝对传奇!谢谢你的全面解答dimlucas。它非常有意义。作品一种享受。每一天都是学校的一天 –
'$ objBedroom. $ i'是无效的PHP。您可以创建一系列卧室对象;即g:'$ objBedroom = $ objRequest-> property-> details-> rooms() - > create(); $ objBedroom-> room_name ='foo'; $ bedrooms [] = $ objBedroom;'我的问题首先是,你将如何处理这些对象 - 你将它们添加到父对象还是其他东西? –