我只是想知道允许多个数据类型作为方法或函数的参数是否是一个好的做法,它将以不同的方式处理输入数据,但总的来说它将以相同的方式运行并返回类似的结果。重要的是要提到我使用PHP,所以我不能重载方法,因为PHP的类型杂耍能力,我可以将任何数据类型传递给参数。为了更容易理解我想要的东西,这里有一个例子:
$form = new Form(); // This is a class which helps manage and process form fields of the $_POST
$form->fetch('user_name'); // Returns the value of the field named user_name as a string ($_POST['user_name'])
$form->fetch(); // If nothing is given as parameter it will return the whole fieldset of the form (whole content of $_POST as an array)
所以我的问题是这是一个很好的做法,或者我应该创建一个fetchAll()
方法。
或者另一个例子:$page->getPageDataDetails(1)
将返回一个数组,其中包含id为1的页面的详细数据。像:
array(
'id' => 1,
'name' => 'foo'
)
虽然$page->getPageDataDetails()
会返回所有网页的详细数据,例如:
array(
0 => array(
'id' => 1,
'name' => 'foo'
)
1 => array(
'id' => 2,
'name' => 'bar'
)
2 => array(
'id' => 5,
'name' => 'something'
)
)
因此该函数使用相同的逻辑(我的意思是语义相同的行为),但输出的格式取决于输入的格式。 这是个好主意吗?
答案 0 :(得分:1)
这取决于您和您的代码,因为如果它是一种公共方法,那么好方法就是创建排除方法,例如->getItem($Id)
和->getItems()
但现在如果您的代码状况不佳并且您想创建单独的方法来获取allItems 并且你将整个代码从一个方法复制并粘贴到第二个并只改变几行,这不是一个好习惯,它是一个完美的!DRY。
我建议您创建->get()
等私有方法,并为此方法创建公共别名,例如->getItem($id)
和->getItems()
缩小你的代码并干净利落地完成它。
这只是我的意见
答案 1 :(得分:0)
重要的是要在代码中明确说明函数有多种用法。两种形式都应该完全明确它们所采用的论证类型,并且应该单独记录。
根据我的经验,这有助于保持组织有序并使调试更容易:
function fetch($name = null) {
if (is_string($name)) {
/*
Returns the value of the field named user_name as a string ($_POST['user_name'])
@param name the user name
*/
// Code here
} else if (is_null($name)) {
/*
Returns the whole fieldset of the form (whole content of $_POST as an array)
*/
// Code here
}
}