我在PHP中使用变量作用域时遇到了一些麻烦。这是我的代码的结构 -
<?php
$loader = new ELLoad();
$sessionid = '';
$method = $_REQUEST['m'];
if (strcasecmp($method, "getfile") == 0) {
global $loader;
$loader->load($file['text']);
global $sessionid;
$sessionid = $loader->getSessionId();
}
if (strcasecmp($method, "extract") == 0) {
$extractor = new ELExtract();
global $sessionid;
$extractor->extract($sessionid); //$session id for some reason is still ' ' here
}
来自客户端的请求序列始终是加载,然后是提取。谁能告诉我为什么我的$ sessionid变量可能无法正确更新?
答案 0 :(得分:1)
$sessionid
仍为''
,因为如果first condition
== false
改进您的代码:
$loader = new ELLoad();
$sessionid = $loader->getSessionId();
$method = $_REQUEST['m'];
if (strcasecmp($method, "getfile") == 0) {
$loader->load($file['text']);
// do more stuff
}
else if (strcasecmp($method, "extract") == 0) {
$extractor = new ELExtract();
$extractor->extract($sessionid);
// do more stuff
}
最好根据您的情况使用$_GET
或$_POST
,而不是$_REQUEST
,最后在不同的重复条件下使用else if
。
答案 1 :(得分:0)
除非你在一个函数中,否则你不必声明global $...
。块(if,while,......)的范围与之前的行相同。
我不知道你想做什么,但你必须在实际会话中保留$sessionid
个内容,例如:
<?php
session_start();
$loader = new ELLoad();
$_SESSION['id'] = '';
$method = $_REQUEST['m'];
if (strcasecmp($method, "getfile") == 0) {
$loader->load($file['text']);
$_SESSION['id'] = $loader->getSessionId();
}
if (strcasecmp($method, "extract") == 0) {
$extractor = new ELExtract();
$extractor->extract($_SESSION['id']); //$session id for some reason is still ' ' here
}