PHP / CI3 - приведение типов не работает должным образом с Boolean - PullRequest
0 голосов
/ 13 октября 2018

Я храню все настройки своего веб-сайта в таблице с именем mh_settings.Таблица mh_setting имеет 2 поля, а именно: имя varchar (255) и тип varchar (255).

В моем MY_Controller.php в основной папке и в конструкторе я читаю имя и ключ в config_item () следующим образом:

    $appConfigOptions = $this->MH_settings_model->mh_get_configurations();

    if($appConfigOptions) {

        foreach($appConfigOptions as $appConfigOption)
            {
            $this->config->set_item($appConfigOption->key,$appConfigOption->value);
            }

    }

Модель получает элементы конфигурации следующим образом:

 class MH_settings_model extends CI_Model {

 protected $table;

 public function __construct() {
            $this->table = 'mh_settings';
 }

 public function mh_get_configurations() {
        $query = $this->db->get($this->table);
        return $query->result();
 }

 }

По какой-то причине, даже если я ввожу приведение mh_site_up_public со значением в базе данных FALSEкажется, это всегда делает его строкой.

    if(((boolean) $this->config->item('mh_site_up_public')) ==  FALSE) {
        show_error($this->config->item('mh_site_down_public_message'));
    }

Я попытался (bool) вместо (boolean).

Я попытался поиграться с == и ===

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Строка "FALSE" - это не то же самое, что логическое значение FALSE.

Строка, содержащая что-либо , оценивается как TRUE, поэтому приведение типа работает как положено.

Вы можете либо изменить свои поля, чтобы использовать INT (0 для false, 1 для true), в этом случае вы можете изменить свой код на:

if(!$this->config->item('mh_site_up_public')) {
    show_error($this->config->item('mh_site_down_public_message'));
}

Или, если вы решите остаться с VARCHAR, выпридется изменить ваш код на

if($this->config->item('mh_site_up_public') === 'FALSE') {
    show_error($this->config->item('mh_site_down_public_message'));
}
0 голосов
/ 13 октября 2018

Поскольку столбцом таблицы является varchar, mh_site_up_public будет строкой с буквенным текстом FALSE.
Непустые строки (или если они содержат только «0») будут считаться истинными.

Пример:

var_dump((bool) '');
// false

var_dump((bool) '0');
// false

var_dump((bool) 'any other content, including FALSE');
// true

Демо: https://3v4l.org/aD0QY

Подробнее об этом можно прочитать в руководстве о логических значениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...