В таком сценарии я задам себе эти вопросы -
Ответ на первый вопрос сам по себе часто приводит к разумной совокупной структуре.
В вашем конкретном примере, поскольку отличаются только типы, я думаю, они могут быть созданы в одной транзакции. Кроме того, инициируемые события не будут отличаться между типами, поэтому лучше иметь один репозиторий.
Хотя Вы связываетесь с руководством PHP, strspn()
функция прибывает из библиотек C, наряду с strlen()
, strcpy()
, strcmp()
, и т.д.
strspn()
удобная альтернатива выбору через символ строки символом, тестируя, если символы соответствуют одному из множества значений. Это полезно при записи токенизаторов. Альтернатива strspn()
было бы много повторяющегося и подверженного ошибкам кода как следующее:
for (p = stringbuf; *p; p++) {
if (*p == 'a' || *p == 'b' || *p = 'c' ... || *p == 'z') {
/* still parsing current token */
}
}
Можно ли определить ошибку?:-)
Конечно, на языке со встроенной поддержкой соответствия регулярного выражения, strspn()
имеет мало смысла. Но при записи элементарного синтаксического анализатора для DSL в C, это довольно изящно.
Это на основе функция ANSI C strspn()
. Может быть полезно в низкоуровневом C коде парсинга, где нет никакого высокоуровневого строкового класса. Это значительно менее полезно в PHP, который имеет много полезных строковых функций парсинга.
Ну, моим пониманием это - то же самое как этот regex:
^[set]*
Где установленный строка, содержащая символы, которые будут найдены.
Вы могли использовать его, чтобы искать любое число или текст в начале строки и разделить.
Кажется, что это было бы полезно при портировании кода на php.
Для функций как atoi - полезно конкретно, где у Вас есть строка, Вы хотите преобразовать в число, и Вы не хотите иметь дело с чем-либо, что не находится в наборе "-.0123456789"
Но да, это ограничило использование.
- Adam