我现在有2个函数来构造html
来显示,具体取决于数据源; 1来自database
,另一来自form
post
。
function buildForm_newUser($user){
$html_username = 'Username = ' . $_POST['username'];
$html_location = 'location = ' . $_POST['location'];
: // similar rows follow more than 20 times
}
function buildForm_exsitingUser($user){
$html_username = 'Username = ' . $user->get_property('username');
$html_location = 'location = ' . $user->get_property('location');
:
}
只用1个功能才能实现这些功能吗?
我试图切换源对象(即上面的$user
和$_POST
),但后来被卡住,因为后者的函数使用了指定对象的函数,而前者没有。此外,因为有许多行必须访问任一对象,所以我喜欢在仅一个位置声明新生成的变量(上例中的$ html_ *变量)。那就是说,我想要这样的事情:
function buildForm($user){ // Number and type of argument can vary
// Do something here to specify object type
$html_username = 'Username = ' . // following here, either $_POST or $user->get_property to get 'username'
$html_location = 'location = ' . // following here, either $_POST or $user->get_property to get 'location'
:
}
感谢。
(也赞赏更好标题的建议......)
答案 0 :(得分:1)
正如你在问题中正确写的那样,这两个函数在某种程度上是相同的,所以你想要改为使用一个函数。
你的动力很好,你发现了一个改善的地方。怎么做?首先,提取一种新的第三种方法:
function buildForm_array($array)
{
$html_username = 'Username = ' . $array['username'];
$html_location = 'location = ' . $array['location'];
... // similar rows follow more than 20 times
}
然后在两个现有方法中使用第三个方法:
function buildForm_newUser()
{
buildForm_array($_POST);
}
function buildForm_exsitingUser($user)
{
$array['username'] = $user->get_property('username');
$array['location'] = $user->get_property('location');
...
buildForm_array($array);
}
根据您的实际代码的样子,这可能会导致不同的结果(此处的示例显然不是结束),例如,您可以根据{{1}创建$user
对象然后使用它来使用现有的$_POST
函数生成表单。
这类似于使用新的第三个函数,但没有创建它。因此找到模式,只需减少重复的代码。简化。
这一直在进行中,因此请保持代码动态,进行更改。
答案 1 :(得分:0)
什么叫这个功能?您只需接受用户名和用户位置作为参数...