Разбор строки в логическое значение в PHP

Сегодня я играл с PHP и обнаружил, что строковые значения «истина» и «ложь» неправильно преобразованы в логические значения в условии, например учитывая следующую функцию:

function isBoolean($value) {
   if ($value) {
      return true;
   } else {
      return false;
   }
}

Если я выполняю:

isBoolean("true") // Returns true
isBoolean("") // Returns false
isBoolean("false") // Returns true, instead of false
isBoolean("asd") // Returns true, instead of false

Кажется, что она работает только со значениями «1» и «0»:

isBoolean("1") // Returns true
isBoolean("0") // Returns false

Есть ли в PHP встроенная функция для анализа «истина» и «ложь» Помощник не может быть разрешен, когда я пытаюсь разрешить Службу . Каков мой лучший вариант?

  • Вариант 1: Удалить Помощник из конструктора Service и явно добавить его в конструктор. Мне не нравится этот вариант, потому что он как бы нарушает парадигму IoC.

  • Вариант 2: Сделайте Helper реализацией общедоступного интерфейса IHelper , а затем добавьте общедоступный модуль в ] ReferencedAssembly , который регистрирует Helper как IHelper . Мне не нравится этот вариант, потому что он требует, чтобы ApplicationAssembly знал слишком много деталей реализации о Service , и если пользователь забывает зарегистрировать этот модуль при запуске, все ломается.

  • Вариант 3: Создайте общедоступный статический конструктор в службе , который создает второй контейнер IoC специально для ReferencedAssembly и регистрирует в нем Helper . Удалите Helper из конструктора Service и разрешите его в конструкторе, используя второй контейнер IoC. Это кажется моим лучшим вариантом, но требует большего количества "сантехнического" кода, чем другие. Я также не большой поклонник общедоступных статических конструкторов.

  • Вариант 4. Полностью изменить мою архитектуру на что-то другое.

7
задан Andy 6 November 2018 в 08:06
поделиться