PHP会话变量未正确传递
我很难理解这个逻辑: 我使用JavaScript检测浏览器宽度,并使用以下代码将该值作为会话变量传递给PHPPHP会话变量未正确传递,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 {
<?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;
}