-1

我现在有 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'
     :
}

谢谢。

(也感谢建议更好的标题......)

4

2 回答 2

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);
}

根据您的实际代码的样子,这可能会导致不同的结果(这里的示例显然不是路的尽头),例如,您可以$user基于创建一个对象$_POST,然后使用它使用现有的生成表单buildForm_exsitingUser($user)功能。

这类似于使用新的第三个函数,但没有创建它。因此,找到模式,并减少重复代码。简化。

这总是在进行中,所以保持你的代码动态,改变它。

于 2012-05-16T23:48:33.143 回答
0

什么在调用这个函数?您可以简单地接受用户名和用户位置作为参数...

于 2012-05-16T23:48:23.957 回答