PHP-代码很简单-类似于MVC部分
NET程序员,但在PHP中是全新的。我为此奋斗了几个小时 我需要简化从接口到数据库的数据传输。我有这样的想法:PHP-代码很简单-类似于MVC部分,php,arrays,dynamic,properties,overloading,Php,Arrays,Dynamic,Properties,Overloading,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 $defa
$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混合”的东西
如果像这样的重载在PHP中是不可能的(或非常复杂的),那么如果有人能给我比上面代码更好的解决方案,我会很高兴的。这是一种可能的方法。您还可以使用_调用方法来实现这一点。这只是一个简单的例子。或者,您可以使用类似于ORM的推进来实现类似的目标。这实际上取决于任务是什么
class Row_Builder {
protected $default = array();
public function __construct() {
$this->default['field_id'] = null;
$this->default['field_name'] = null;
$this->default['val-string'] = null;
$this->default['val-int'] = null;
$this->default['val-float'] = null;
$this->default['val-image'] = null;
$this->default['val-datetime'] = null;
$this->default['val-boolean'] = false;
return;
}
public function setValues() {
// we only need the fist argument in this case.
$params= func_get_arg(0);
if(isset($params)) {
foreach($params as $key => $value) {
if(array_key_exists($key,$this->default)) {
$this->default[$key] = $value;
}
}
}
}
public function __get($key) {
if(array_key_exists($key, $this->default)) {
return $this->default[$key];
}
}
}
$row = new Row_Builder;
$row->setValues(array('field_id' => 1, 'field_name' => 'some value', 'val-string' => 'here is a str value'));
print $row->field_name;
这是一种可能的方法。您还可以使用_调用方法来实现这一点。这只是一个简单的例子。或者,您可以使用类似于ORM的推进来实现类似的目标。这实际上取决于任务是什么
class Row_Builder {
protected $default = array();
public function __construct() {
$this->default['field_id'] = null;
$this->default['field_name'] = null;
$this->default['val-string'] = null;
$this->default['val-int'] = null;
$this->default['val-float'] = null;
$this->default['val-image'] = null;
$this->default['val-datetime'] = null;
$this->default['val-boolean'] = false;
return;
}
public function setValues() {
// we only need the fist argument in this case.
$params= func_get_arg(0);
if(isset($params)) {
foreach($params as $key => $value) {
if(array_key_exists($key,$this->default)) {
$this->default[$key] = $value;
}
}
}
}
public function __get($key) {
if(array_key_exists($key, $this->default)) {
return $this->default[$key];
}
}
}
$row = new Row_Builder;
$row->setValues(array('field_id' => 1, 'field_name' => 'some value', 'val-string' => 'here is a str value'));
print $row->field_name;
对于mvc,您是否寻找过任何特定的框架,如cakephp?您可以尝试在方法中使用func_get_参数,然后进行类型检查,或者也可以使用u调用magic函数。您使用的数据库接口是什么?您是否研究过任何现有的PHP DAL或ORM?试着用你在.NET中使用的方法来做这件事是不可能的。问题是,你想在PHP中完成什么,最好的方法是什么?对于mvc,你有没有寻找像cakephp这样的特定框架?你可以尝试在方法中使用func_get_参数,然后进行类型检查,或者也可以使用u call magic函数。你正在使用的数据库接口是什么?您是否研究过任何现有的PHP DAL或ORM?试着用你在.NET中使用的方法来做这件事是不可能的。问题是,你想在PHP中完成什么,最好的方法是什么?看起来这正是我需要的。非常感谢。如果我理解这一点,我只能设置我需要的值,比如:$row->setValues(数组('field\u id'=>1,'field\u name'=>name');数组中的所有字段都将可用,其中两个字段将存储我设置的值。其他字段将填充默认数据。对吗?@Kamil当对象完全启动时,会设置默认值。请参阅_构造函数中的示例。看起来这正是我需要的。非常感谢。如果我理解这一点,我只能设置我需要的值,比如:$row->setValues(数组('field\u id'=>1,'field\u name'=>name');数组中的所有字段都将可用,其中两个字段将存储我设置的值。其他字段将填充默认数据。对吗?@Kamil当对象完全启动时,会设置默认值。请参见_构造函数中的示例。