我从命令行程序获取数组输出并将其解析为PHP对象。考虑这个实例的一个非常简单的方法示例:
$output = explode("\n", shell_exec(myProg));
$obj = new MyObject();
$offset_field1 = 0;
$offset_field2 = 1;
$obj->Field1 = $output[$offset_field1];
$obj->Field2 = $output[$offset_field2];
这有点麻烦,特别是当字段数增加时。是否有更好的设计模式或方法以较轻的方式完成同样的壮举?
答案 0 :(得分:1)
我想这应该有效:
$output = explode("\n", shell_exec(myProg));
$obj = new MyObject();
foreach ($output as $key => $value)
{
$obj->{'Field' . ($key + 1)} = $value;
}
答案 1 :(得分:1)
由于您似乎无法从程序的输出中猜出字段名称,因此您必须在某处定义它。
$key_map = array('field_name1', 'field_name2', 'etc');
$obj = new MyObject();
foreach(explode("\n", shell_exec(myProg)) as $k => $v)
{
if(isset($key_map($k))
$obj->$key_map[$k] = $v;
}
答案 2 :(得分:1)
为什么不将赋值代码放在对象中?
class MyObject
{
public function __construct(array $data)
{
$this->Field1 = $data['keyname1'];
$this->Field2 = $data['keyname2'];
...
}
}
或使用get magic方法。
class MyObject
{
protected $data;
public function __construct(array $data)
{
$this->data = $data;
}
public function __get($key)
{
$map = array('Field1' => 1, 'Feild2' => 2, ...);
if (isset($map[$key])) {
return $this->data[$map[$key]];
}
}
}