【发布时间】:2012-02-17 04:45:02
【问题描述】:
我是 .NET 程序员,但对 PHP 来说是全新的。我与这个斗争了几个小时。
我需要简化从接口到数据库的数据传输。我有这样的事情:
$default = new stdClass();
// default values - all of them should be set to default value
// some of them will be overwritten later, but only one of them
$default->{'val-string'} = ''; // default values start
$default->{'val-int'} = 0;
$default->{'val-float'} = 0;
$default->{'val-image'} = ' ';
$default->{'val-datetime'} = 0;
$default->{'val-boolean'} = false; // default values end
$container = array();
$row = clone $default;
$row->{'field_id'} = 1;
$row->{'field_name'} = $nameoffield1;
$row->{'val-string'} = 'Diffrent types are filled for diffrent rows';
$container[] = $row;
$row = clone $default;
$row->{'field_id'} = 2;
$row->{'field_name'} = $nameoffield2;
$row->{'val-int'} = $valueoffield2;
$container[] = $row;
$row = clone $default;
$row->{'field_id'} = 3;
$row->{'field_name'} = $nameoffield3;
$row->{'val-datetime'} = current_time();
$container[] = $row;
// there
// is
// a lot
// of these
//rows
$result = $database->insertContainer($db_session, $container);
最后需要类似“伪代码 .NET 与 php 混合”
list_of_rows.AddItem(makeRow($field_id1, $name1, (int)$dataforint)));
list_of_rows.AddItem(makeRow($field_id2, $name2, (string)$dataforstring));
list_of_rows.AddItem(makeRow($field_id3, $name3, (date)$datafordate));
list_of_rows.AddItem(makeRow($field_id4, $name4, (boolean)$dataforboolean));
$result = $database->insertContainer($db_session, list_of_rows);
如果这样的重载在 PHP 中是不可能的(或非常复杂的)——如果有人给我比顶部的代码更好的解决方案,我会很高兴。
【问题讨论】:
-
对于mvc,您是否寻找任何特定的框架,例如cakephp?
-
您可以尝试在方法中使用 func_get_args 然后进行类型检查,或者您也可以使用 __call 魔术函数。
-
您使用的数据库接口是什么?您是否查看过任何现有的 PHP DAL 或 ORM?尝试以与在 .NET 中相同的方式进行操作不会很好地翻译。问题是,你想完成什么?在 PHP 中最好的方法是什么?
标签: php arrays dynamic properties overloading