2012-10-27 2 views
1

При написании функций на PHP, как широко проверять и проверять данные в параметрах?Функция PHP, проверка типов данных параметров и допустимых значений?

Например, если я ожидаю, что параметр будет логическим, должен ли я использовать его как таковой?
Или проверьте, что тип параметра является логическим и если возврат невозможен FALSE?

Мне не очень нравится идея возврата FALSE из функции только потому, что параметр недействителен, если функция функции (urrg) не проверяет некоторые данные. Потому что он может маскировать фактический результат функции, если он предназначен для возврата TRUE/FALSE в любом случае.

Если функция генерирует ошибку PHP из-за недействительных данных, предоставляемых разработчику, то это более полезно для разработчика, чем просто возврат FALSE или возврат пустой строки. Таким образом, они знают, что их входные данные (и, следовательно, возможное использование функции) являются недопустимыми/неверными, а не те тесты внутри функции, которые возвращают FALSE, а не TRUE.

Я всегда мог проверить данные, поступающие в функцию, и trigger_error(), если данные недействительны. Но в какой степени это необходимо?

+0

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

+0

Если вы активно работаете против слабого набора текста, скорее всего, вы используете неправильный язык для начала. Как правило, можно использовать 'assert()' decorations, если только поток приложений и поведение нестабильны, так как после развертывания вы можете получить недопустимые типы. Используйте execeptions, если вы не можете его упорядочить во время разработки. – mario

+0

О да, абсолютно я знаю о свободно типизированной природе PHP. На самом деле это то, что делает его таким простым языком для использования. Но мне интересно, должен ли я тестировать значения и типы параметров, когда они входят в функцию.На данный момент я склонен полагаться только на то, что разработчик (я) разумен и понимает, есть ли ошибка с этой функцией, чтобы убедиться, что они правильно ее используют. Только когда-либо я использую эти функции в данный момент, но что, если кто-то когда-нибудь захочет их использовать? – batfastad

ответ

1

PHP не является сильным типизированным языком, и в результате переменные свободно набираются. Для массивов и объектов вы можете использовать type hinting в вызове функции и позволить PHP обрабатывать ошибки на неправильных типах.

Существует rumour, что в следующей версии php также будет отображаться поддержка подсказок для примитивных типов (скаляров). Когда это произойдет, ваша проблема решена.

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

Я думаю, что плохая конструкция возвращает false, если что-то не так. Функция должна иметь четкий результат.

+0

Да, я понимаю, что набирает текст и печатает намеки. – batfastad

1

Как сказал Асад, это действительно зависит от того, кто/что вы разрабатываете и как далеко вы хотите идти. Throwing argumentInvalidExceptions - неплохая идея и часто используется на других языках.

Я предпочитаю использовать очевидные имена объясняющих себя (вместо i или x), имена функций и phpdoc, когда поведение неожиданно. Кроме того, поскольку php 5.1 вы можете использовать типизированные параметры, которые проверяют вас (работает только для классов, интерфейсов и массивов).

Я советую, чтобы данные извне (пользовательский ввод, файлы, сеть и т. Д.) ВСЕГДА проверены.

Смежные вопросы