Что является лучшим методом при создании функций / методов в PHP, вы используете массивы или отдельные переменные? - PullRequest
3 голосов
/ 15 января 2009

Считается ли "плохой практикой" создание такой функции:

// $arr_member_fields['first_name'] = $_POST['first_name'];
// $arr_member_fields['last_name']  = $_POST['first_name'];
// $arr_member_fields['email']      = $_POST['email'];
// $arr_member_fields['dob']        = $_POST['dob'];
// $arr_member_fields['gender']     = $_POST['gender'];

function update_member($int_member_id $arr_member_fields)
{
    //some code
}

Или следует создать функцию без массива и просто использовать вместо нее переменные - например, так:

function update_member($int_member_id, $str_first_name, $str_last_name, str_email, $str_dob, $chr_gender)
{
    //some code
}

Причина, по которой я предпочитаю первый метод (метод с массивом), заключается в том, что у меня всегда есть возможность перебирать массив для вставки / обновления базы данных.

Очень любопытно узнать мнение других людей по этому вопросу.

Ответы [ 5 ]

1 голос
/ 15 января 2009

Зависит от функции. Здесь нет лучшей практики, которая бы адекватно отражала большинство случаев при написании функции. Что если вам не нужно перебирать аргументы?

Похоже, в этом случае вам лучше всего пропускать массивы.

0 голосов
/ 16 января 2009

Я думаю, что передача параметров по массиву - это вообще плохая идея. Если списки параметров настолько длинны, что оправдывают передачу их в виде массива, это, вероятно, признак того, что код разработан не лучшим образом.

Передача параметров в массиве труднее документировать, используя что-то вроде PHPDocumentor, и также не будет восприниматься при завершении кода в IDE. Прозрачность передачи параметров также позволяет использовать подсказки для типов и более прозрачна для читателя кода.

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

0 голосов
/ 16 января 2009

Я бы пошел вторым методом, потому что ваша IDE может сказать вам, какие параметры он должен принимать, не обращаясь к этому файлу. Может показаться, что сейчас нормально использовать массив для небольшого проекта, но по мере увеличения вашего проекта это может стать проблемой позже. Это также избавит вас от необходимости спрашивать себя позже, когда вы пытаетесь использовать его: «Я использовал имя_первую или имя_папка?» Эти поля выглядят так, как будто бы все они находятся в одной таблице, которая в любом случае будет обновлена ​​в одном операторе, поэтому я не вижу причин, по которым вы захотите перебрать массив.

0 голосов
/ 16 января 2009

Подобные вещи в конечном итоге сводятся к снижению производительности и читабельности кода. Хотя передача массива чрезвычайно удобна, это также затрудняет отслеживание кем-либо еще вашего кода (или даже вас, если вы вернетесь к нему через 6 месяцев). Это особенно верно, если массив определен где-то еще в большом файле или вообще в другом файле.

В конце концов, все сводится к тому, почему вы пытаетесь оптимизировать свой код в первую очередь. Это для производительности или для облегчения понимания / чтения?

Если это для удобства чтения, выберите подход, который кажется наиболее простым для понимания. Вы будете благодарить себя, когда вам придется вернуться и что-то настроить через несколько месяцев.

Если это для производительности, убедитесь, что вам действительно нужно повысить производительность и что вы не оптимизируете что-то только ради оптимизации. Чаще всего вы создаете очень реальную проблему читабельность , пытаясь решить несуществующую проблему производительность .

0 голосов
/ 15 января 2009

Это тот случай, когда я бы рассмотрел структуру для хранения данных. Таким образом, я могу передать структуру или массив структуры методам или получить доступ к отдельным элементам структуры.

Конечно, если бы я хотел пойти дальше, я бы сделал класс вместо структуры. Тогда у меня могут быть методы, а также данные, установщики, получатели с проверкой и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...