if ( ($a !== "B") || ( !in_array($a, array("C", "D") && is_string($a) ) ) ) {
...
}
правильно, - вы делаете хорошо.
также, вы не уточняете, должно ли оно быть равным к типу 'B' или нет:
, если $ a НЕ равно 'B'
, так что это может быть if ( ($a !== "B") ||
, а также if ( ($a != "B") ||
!==
означает not equal to
и not equal to its type
,
, когда ===
означает оба equal to
и equal to its type
.
К @Kerkouch с уважением,
Как $ a будет равно 'C' или 'D', если это не строка?
- конечно, говоря на php не может; тем не менее, если бы мы могли абстрагироваться, это может зависеть от языка, даже если такого языка еще не существует)