Переменная сеанса PHP установлена, но PHP ее не видит.Очень странно
-
21-08-2019 - |
Вопрос
Ладно, возможно, это потому, что я программировал более 24 часов, и мои глаза тускнеют, но я здесь в тупике.Почему это происходит:
<?php session_start(); $tmp = "index"; echo "A: " . $_SESSION['page_loaded']['index']; // returns 1 echo "B: " . $_SESSION['page_loaded'][$tmp]; // is set, but is empty ?>
Я чувствую, что мне не хватает чего-то очень важного, но я не знаю, чего именно.
Решение
У меня такое ощущение, что вы на самом деле не вырезали и не вставили этот код?Есть ли что-то, что вы упускаете?
Другие советы
Где вы устанавливаете следующее?
$_SESSION['page_loaded'][$tmp];
Следующие работы:
<?php
session_start();
$tmp = "index";
$_SESSION["page_loaded"][$tmp] = "Foo";
echo "A: " . $_SESSION['page_loaded']["index"]; // foo
echo "<br/>";
echo "B: " . $_SESSION['page_loaded'][$tmp]; // foo
?>
Попробуйте это с var_dump
функцию, чтобы увидеть ее значение.
Попробуйте использовать:
$tmp = 'index'; // Note the single quotes.
//...
echo "B: " . $_SESSION['page_loaded'][$tmp];
PHP интерпретирует строки с двойными и одинарными кавычками немного по-разному.Прочитайте эти статьи здесь и здесь поскольку это может быть то, с чем вы столкнулись.
ОБНОВЛЯТЬ:Просто чтобы прояснить (с учетом комментариев ниже), мои доводы в пользу проверки того, влияет ли использование строк с одинарными или двойными кавычками на проблему оригинальных плакатов, показаны в примере ниже, где две строки не равны:
$var = 1;
$tmpA = 'index_$var'; // will resolve to index_$var
$tmpB = "index_$var"; // will resolve to index_1
if ( $tmpA === $tmpB)
echo 'Identical';
else
echo 'Not Identical!'; // <--- we get this because they are NOT identical.
тебе следует использовать
$_SESSION['page_loaded']['tmp'] = "index";
вместо
$tmp = "index";
и для получения значения используйте это
echo "B: " . $_SESSION['page_loaded']['tmp']; // the output is: B: index
(избавьтесь от знака доллара $)