Стоит ли проверять типы параметров в функциях PHP? - PullRequest
7 голосов
/ 20 сентября 2011

Я привык проверять тип моих параметров при написании функций. Есть ли причина для или против этого? Например, будет ли хорошей практикой сохранять проверку строки в этом коде или удалять ее и почему?

function rmstr($string, $remove) {
    if (is_string($string) && is_string($remove)) {
        return str_replace($remove, '', $string);
    }
    return '';
}

rmstr('some text', 'text');

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

Ответы [ 5 ]

6 голосов
/ 20 сентября 2011

Да, все в порядке.Тем не менее, php не является строго типизированным для начала, поэтому я думаю, что это не очень полезно на практике.

Кроме того, если используется объект, отличный от строки, исключение является более информативным;поэтому я бы постарался не возвращать пустую строку в конце, потому что семантически не объясняется, что вызов rmstr (array, object) возвращает пустую строку.

5 голосов
/ 20 сентября 2011

Мое мнение таково, что вам следует выполнить такую ​​проверку, если вы принимаете ввод от пользователя. Если эти строки не были приняты от пользователя или очищены от пользователя, то выполнение проверки является чрезмерным.

2 голосов
/ 20 сентября 2011

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

Примечание: вы можете добавить информацию, какие типы разрешены для аргументов ваших функций phpDoc

1 голос
/ 20 сентября 2011

Кажется, местные люди понимали этот вопрос как «Если вы проверите параметры», где он был «Если вы проверите параметр типы », и делали из него бессмысленные ответы и комментарии.

Лично я никогда не проверяю типы операндов и никогда не испытывал проблем с этим.

0 голосов
/ 20 сентября 2011

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

Если это не для производственного использования и вам не нужно защищаться от кода, вы можете игнорировать все что угодно и следовать принципу «мусор в мусоре» (или принципу «три дерьма»: дерьмо в коде, дерьмо в процессе, получить дерьмо) .

В конце концов, это все о соответствии ожиданиям: если вам не нужна ваша функция для правильной работы, вам не нужно ее правильно кодировать. Если вы действительно полагаетесь на то, что ваш код работает точно, вам даже нужно проверить входные данные на каждую единицу (функцию, класс).

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