Я только что заметил что-то странное при использовании системы сессий CodeIgniter 3, и мне интересно, является ли это проблемой или просто нормальным с PHP.
Чтобы объяснить, я инициализировал эту переменную:
$this->session->connected_client_id = 9;
Когда я делаю это:
$id = $this->session->connected_client_id
// Testing using "get_userdata" function
if (empty($this->session->get_userdata('connected_client_id'))) {
echo "EMPTY $id";
} else {
echo "NOT EMPTY $id";
}
Все нормально, я получаю: НЕ ПУСТО 9
НО, когда я делаю это:
$id = $this->session->connected_client_id
// Testing using the CodeIgniter 3 session getter
if (empty($this->session->connected_client_id))) {
echo "EMPTY $id";
} else {
echo "NOT EMPTY $id";
}
Это НЕ хорошо, я получаю: ПУСТО 9
Хотя, когда я делаю это:
$id = $this->session->connected_client_id
// Testing using a variable as intermediate from the CI3 session getter
if (empty($id))) {
echo "EMPTY $id";
} else {
echo "NOT EMPTY $id";
}
Все нормально, я получаю: НЕ ПУСТО 9
Я использую переменную в качестве промежуточного от предыдущего получателя, который возвращал «ПУСТО 9» …
У кого-нибудь есть объяснение этому? И есть ли правильный способ выполнить эту проверку без этой «пустой проблемы»?
Это … оба — нормально в PHP, учитывая CI_Session
код класса, но также проблема в CodeIgniter, потому что этот конкретный вариант использования должен работать, но не работает.
Этот патч исправит это в следующей версии CodeIgniter (3.0.6): https://github.com/bcit-ci/CodeIgniter/commit/2c10f60586faf59b9380608c5a9bf01ff2522483
Тем не менее, я склонен предложить доступ к $_SESSION
прямой массив — это то, что библиотека дает вам в любом случае.
Других решений пока нет …