PHP会话变量未正确传递

PHP会话变量未正确传递,php,session,scope,Php,Session,Scope,我很难理解这个逻辑: 我使用JavaScript检测浏览器宽度,并使用以下代码将该值作为会话变量传递给PHP <?php session_start() if (empty($_SESSION['layoutType'])) { echo '<script type="text/javascript"> var session=false; var layoutType;</script>'; } else {

我很难理解这个逻辑:

我使用JavaScript检测浏览器宽度,并使用以下代码将该值作为会话变量传递给PHP

<?php
    session_start()
    if (empty($_SESSION['layoutType'])) {
        echo '<script type="text/javascript"> var session=false; var layoutType;</script>';
    } else {
        echo '<script type="text/javascript"> var session=true; var layoutType=' . $_SESSION['layoutType'] . ';</script>';
    }
    if (!empty($_SESSION['layoutType'])) {
        $layoutType = $_SESSION['layoutType'];
        if ( $layoutType <= 219 ) {
            $layout = 'mobile';
        } else if ($layoutType >= 220 && $layoutType <= 1024 ) {
            $layout = 'tablet';
        } else {
            $layout = 'desktop';
        }
    }
    echo $layout;
尽管布局是针对桌面的,但它现在以
mobile
的形式提供输出,并且与上面的链接相呼应。为什么?


我做错什么了吗?

像这样调用函数(
getFevicons($layout);
):

函数getFevicons($layout){ 交换机($layout){ “手机”案例: 回声'; 打破 “桌面”案例: 呼应“无论什么”; 打破 “药片”案例: 呼应“无论什么”; 打破 违约: //这绝对没有用 } echo$布局; }
因为您的函数引入了新的。函数外部的变量在函数内部不可见。你必须:

将函数调用为:

getFevicons($layout);

您也可以使用关键字,但这通常被认为是不好的做法,因为它会导致代码库更难维护,并且依赖关系也不清楚

function getFevicons(){
    global $layout;
    ...
    echo $layout;
}

他可以使用这个
global$layout
@AhmedJolani不,他不应该。这很快就会导致糟糕的、不可维护的代码。应该避免。坦白说,我真的不知道是谁干的,我真的很抱歉。@AhmedJolani,这很奇怪。我解决了这个问题,提供了一个高质量的(至少我认为是这样)答案,并试图进行教学。我对你没有意见,你只是帮助了OP,他不愿意自己做任何事情。即使问题与开关和条件无关。我只想知道投票被否决的原因,因为我想知道我是否可以改进我的答案。仇恨向下投票在专业网站上没有一席之地。这里首先是一个向上投票,不要担心那些垃圾邮件发送者是盲目的。也许你想将
getFevicons
重命名为
getFavicons
:)虽然与您的问题不太相关。@Christian很抱歉输入错误,谢谢您的更正。
function getFevicons($layout){
    ...
    echo $layout;
}
getFevicons($layout);
function getFevicons(){
    global $layout;
    ...
    echo $layout;
}