Мне просто интересно, если это хорошая практика, разрешить несколько типов данных в качестве параметров метода или функции, которые будут обрабатывать входные данные по-разному, но в целом он будет вести себя одинаково и будет возвращать аналогичные результаты. Важно отметить, что я использую 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)
вернет массив, содержащий подробные данные страницы с идентификатором: 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'
)
)
Таким образом, функция работает с той же логикой (я имею в виду семантически то же поведение), но формат вывода зависит от формата ввода.
Это хорошая идея?
Это зависит от вас и вашего кода, потому что, если это публичный метод, хорошим способом является метод create exclude, такой как ->getItem($Id)
а также ->getItems()
Но теперь, если ваш код не в хорошем состоянии, и вы хотите создать отдельный метод для получения allItems
и вы копируете и вставляете весь код из одного метода во второй и меняете только несколько строк, это не очень хорошая практика, это идеальный вариант! СУХОЙ.
Я рекомендую создать частный метод, как ->get()
и создать публичный псевдоним этого метода, как ->getItem($id)
а также ->getItems()
чтобы минимизировать ваш код и получить его чисто.
Это только мое мнение
Важно, чтобы в вашем коде было ясно, что эта функция используется несколькими способами. Обе формы должны быть полностью явными о типе аргументов, которые они принимают, и должны документироваться отдельно.
По моему опыту, это помогает поддерживать порядок и облегчает отладку:
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
}
}