2011-06-01 17 views
0

您好,我想介绍此示例。回声会话变量按预期工作,但省略'回声'时,会发出未定义的变量通知

当我在输出有

echo $_SESSION['lang']; 

我 '恩' 如我所料。

连接

但是:当我在同一行只写

$_SESSION['lang']; 

我有通知,该索引郎是不确定的。

注意:未定义指数:郎......

请注意,我在Zend框架和这种情况下occure只有当我成立这也创下了$_SESSION['__ZF']$_SESSION[' Zend_Form_Element_Hash_unique_token']值Zend_Form_Hash元素。

有人可以解释这种情况吗?

+4

你能发布一个完整的代码示例吗? – reeaal 2011-06-01 09:48:22

回答

0

如果它在同一个文件中,而且您只是简单地将这些语句互换,那么$_SESSION['lang']echo $_SESSION['lang']绝对不会访问任何不同的东西。

在发布实际答案之前,我们需要查看完整的代码并说明您实际正在做什么。

如果你从字面上这样做就像我说的,它不会有所作为:

<?php 
session_start(); 
echo $_SESSION['lang']; 

然后改变线路3:

<?php 
session_start(); 
$_SESSION['lang']; 

虽然第二行不会输出任何东西,当然不会有错误。

0

在您的第一条语句中,您将会话中'lang'索引的值发送到输出。在你的第二个陈述中,你只是在会话中访问'lang'索引的值,而没有做任何特别的事情。 这两个陈述都指向相同的值。

所以问题不在于使用“回声”之间。问题是: 您确定会话中的'lang'索引在您的两次尝试中都可用吗? 您是否在同一个文件中使用了两个语句,以响应相同的请求?会话值在用户“上下文”中设置并可用。

0

var_dump($_SESSION)找出究竟是什么里$_SESSION

0

如果您使用ZF,那么你应该使用Zend_Session_Namespaces。 你需要设置你的命名空间是这样的:

// setup namespace 
$namespace = new Zend_Session_Namespace('locale'); 
// write values to your namespace with 
$namespace->lang = 'en'; 
// read values from your namespace with 
$language = $namespace->lang; 

您还需要在早期阶段开始Zend_Session组件,比如在你的引导或早期插件有:

Zend_Session::start(); 

亲切的问候 加里

0

在bootstrap.php中

  1. 我开始我自己的会议。这些值从DB存储/恢复。所以我initilyize $ _SESSION值。

  2. 然后我处理语言值。简单地设置。

$_SESSION['lang'] = 'en';

当我检查这个值,它的工作原理如我所料。问题是当我使用Zend_Form_Element_Hash使用“自己的”SESSION处理。我没有深入研究它,但我解释了,当我在类方法中回显SESSION时,我可以将'lang'看作'en',但没有echo,代码继续前进,Zend_Form_Element_Hash重写完整的会话,这就是为什么'lang'是失踪。

我只是实现自己的散列令牌,并继续...

谢谢你们的帮助和aplologize不清晰的要求。