PHP变量范围

时间:2013-08-28 16:45:28

标签: php

我在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变量可能无法正确更新?

2 个答案:

答案 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
}