Существует медленный и утомительный способ решения этой проблемы, который включает в себя много ручной проверки типов.Вы можете носить клавиатуру без надписей if (!is_string($foo))
условий во всем приложении.
Или же вы можете использовать Ионизатор , который был разработан для решения именно этой проблемы.
<?php
use ParagonIE\Ionizer\GeneralFilterContainer;
use ParagonIE\Ionizer\Filter\{
StringFilter,
WhiteList
};
// Define properties to filter:
$ic = new GeneralFilterContainer();
$ic->addFilter(
'username',
(new StringFilter())->setPattern('^[A-Za-z0-9_\-]{3,24}$')
)
->addFilter('passphrase', new StringFilter())
->addFilter(
'domain',
new WhiteList('US-1', 'US-2', 'EU-1', 'EU-2')
);
// Invoke the filter container on the array to get the filtered result:
try {
// $post passed all of our filters.
$post = $ic($_POST);
} catch (\TypeError $ex) {
// Invalid data provided.
}
Если кто-то пытается передать массив вместо строки, $ic($_POST)
выдает TypeError
, который вы затем можете перехватить, зарегистрировать и завершить с ошибкой.