1

我无法理解这个逻辑:

我正在使用 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;

这会根据浏览器宽度正确显示值mobiletablet或。desktop但是当我尝试使用相同的变量并将以下代码粘贴到上述代码下方时,它会更改 的值$layout

    function getFevicons(){
        if ( $layout = 'mobile' ); {
            echo '
            <link rel="apple-touch-icon" href="cdn/images/apple-touch-icon.png">
            <link rel="apple-touch-icon" sizes="72x72" href="cdn/images/apple-touch-icon-72.png">
            <link rel="apple-touch-icon" sizes="114x114" href="cdn/images/apple-touch-icon-114.png">
            ';
        }
        echo $layout;
    }
?>

即使布局是针对桌面的,它现在也给出了输出,mobile并且它也呼应了上面的favicon链接。为什么?

难道我做错了什么?

4

2 回答 2

1

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

function getFevicons($layout){
    switch ($layout) {
        case 'mobile':
            echo '<link rel="apple-touch-icon" href="cdn/images/apple-touch-icon.png"><link rel="apple-touch-icon" sizes="72x72" href="cdn/images/apple-touch-icon-72.png"><link rel="apple-touch-icon" sizes="114x114" href="cdn/images/apple-touch-icon-114.png">';
            break;

        case 'desktop':
            echo 'whatever';
            break;

        case 'tablet':
            echo 'whatever';
            break;

        default:
            // This will absolutely do nothing
    }
    echo $layout;
}
于 2012-05-05T21:15:18.957 回答
1

因为您的函数引入了一个新的变量范围。函数外的变量在函数内是不可见的。您必须将它们作为参数传递

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

并将您的函数称为:

getFevicons($layout);

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

function getFevicons(){
    global $layout;
    ...
    echo $layout;
}
于 2012-05-05T21:20:25.177 回答