创建动态命名的对象

时间:2016-07-05 12:07:02

标签: php oop

我正在与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回来了

似乎我无法创建一个$ objBedroom加上一个可变数字。

任何帮助表示赞赏

此致 基思

一只试图学习新技巧的老狗!

2 个答案:

答案 0 :(得分: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 :(得分: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);