Многократное использование метода в переполнении стека

Мне просто интересно, если это хорошая практика, разрешить несколько типов данных в качестве параметров метода или функции, которые будут обрабатывать входные данные по-разному, но в целом он будет вести себя одинаково и будет возвращать аналогичные результаты. Важно отметить, что я использую 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'
)
)

Таким образом, функция работает с той же логикой (я имею в виду семантически то же поведение), но формат вывода зависит от формата ввода.
Это хорошая идея?

0

Решение

Это зависит от вас и вашего кода, потому что, если это публичный метод, хорошим способом является метод create exclude, такой как ->getItem($Id) а также ->getItems()

Но теперь, если ваш код не в хорошем состоянии, и вы хотите создать отдельный метод для получения allItems
и вы копируете и вставляете весь код из одного метода во второй и меняете только несколько строк, это не очень хорошая практика, это идеальный вариант! СУХОЙ.

Я рекомендую создать частный метод, как ->get() и создать публичный псевдоним этого метода, как ->getItem($id) а также ->getItems()
чтобы минимизировать ваш код и получить его чисто.

Это только мое мнение

1

Другие решения

Важно, чтобы в вашем коде было ясно, что эта функция используется несколькими способами. Обе формы должны быть полностью явными о типе аргументов, которые они принимают, и должны документироваться отдельно.

По моему опыту, это помогает поддерживать порядок и облегчает отладку:

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

}

}
0

По вопросам рекламы [email protected]