Рядки завжди оцінюють як булеві істинні, якщо вони не мають значення, яке PHP вважає "порожнім": взято з документації наempty :
"" (порожній рядок);
"0" (0 як рядок)
Якщо вам потрібно встановити булеве значення на основі текстового значення рядка, вам потрібно буде перевірити наявність чи інше цього значення.
$test_mode_mail = $string === 'true'? true: false;
EDIT: наведений вище код призначений для ясності розуміння. У фактичному використанні наступний код може бути більш підходящим:
$test_mode_mail = ($string === 'true');
або, можливо, використання filter_varфункції може охопити більше булевих значень:
filter_var($string, FILTER_VALIDATE_BOOLEAN);
filter_varохоплює весь діапазон значень, в тому числі значень truthy "true", "1", "yes"і "on". Дивіться тут для більш детальної інформації.