私はまだZF2を理解することを学んでいますが、最善の方法は物事を行うことです. 私はこの奇妙な問題に遭遇し、これが予想される動作であるかどうか疑問に思っていました.
私のアプリケーションでは、次のコードがあります
//In module.php getServiceConfig()
return array(
'invokables' => array(
'hardwareEntity' => 'Hardware\Model\Hardware',
),
}
私のコントローラーでは、x要素の配列になるテキストの塊からデータを取得します例として3を取りましょう
$hardwares = array(
'hw1' => array(
'name' => 'router1'
'ip' => '192.168.0.200',
'type' => 'router',
),
'hw2' => array(
'name' => 'pc1'
'ip' => '192.168.0.210',
'type' => 'pc',
),
'hw3' => array(
'name' => 'pc2'
'ip' => '192.168.0.211',
'type' => 'pc',
),
);
ハードウェア モジュールにハードウェア クラスがあります
namespace Hardware\Model\;
class Hardware
{
protected $name = null;
protected $ip = null;
protected $type = null;
public function exchangeArray(array $data) {
$this->name = (isset($data['name'])) ? $data['name'] : $this->name;
$this->ip = (isset($data['ip'])) ? $data['ip'] : $this->ip;
$this->type = (isset($data['type'])) ? $data['type'] : $this->type;
}
}
次のforeachループを実行すると、魔法が起こります。異なる結果が得られます
foreach($hardwares as $hw) {
$h = $this->getServiceManager()->get('hardwareEntity');
$h->exchangeData($hw);
$aObjects[] = $h
}
$aObjects 配列には、Hardware\Model\Hardware のタイプのオブジェクトを含む 3 つの要素が含まれるようになりましたが、最後の $hardwares 要素のデータが含まれています (別名、ループ中にすべてのクラスをデータで上書きします)。
結果:
array(3) {
[0]=>
object(Hardware\Model\Hardware)#219 {
["name":protected]=>
string(7) "pc2"
["ip":protected]=>
string(13) "192.168.0.211"
["type":protected]=>
string(6) "pc"
}
[1]=>
object(Hardware\Model\Hardware)#219 {
["name":protected]=>
string(7) "pc2"
["ip":protected]=>
string(13) "192.168.0.211"
["type":protected]=>
string(6) "pc"
}
[2]=>
object(Hardware\Model\Hardware)#219 {
["name":protected]=>
string(7) "pc2"
["ip":protected]=>
string(13) "192.168.0.211"
["type":protected]=>
string(6) "pc"
}
しかし、私がするとき
foreach($hardwares as $hw) {
$h = new \Hardware\Model\Hardware();
$h->exchangeData($hw);
$aObjects[] = $h
}
それぞれ異なるデータを含む新しくインスタンス化されたクラスで $aObjects 配列を埋めます。
結果:
array(3) {
[0]=>
object(Hardware\Model\Hardware)#219 {
["name":protected]=>
string(7) "router1"
["ip":protected]=>
string(13) "192.168.0.200"
["type":protected]=>
string(6) "router"
}
[1]=>
object(Hardware\Model\Hardware)#220 {
["name":protected]=>
string(7) "pc1"
["ip":protected]=>
string(13) "192.168.0.210"
["type":protected]=>
string(6) "pc"
}
[2]=>
object(Hardware\Model\Hardware)#221 {
["name":protected]=>
string(7) "pc2"
["ip":protected]=>
string(13) "192.168.0.211"
["type":protected]=>
string(6) "pc"
}