1

所以我有一个我用 PHP 编写的样式表以及一个包含在样式表顶部的设置文件,其中包含一些定义我的一些 css 属性的变量和函数。例如:

// Background color for body element
// Type: String
$bodyBGColor = 'rgb(67,142,169)';

// Has background Image for body element
// Type: Bool
$bodyBGIMG = false;

function hasBGIMG(){
    if($bodyBGIMG){
        echo "url(../img/".$adPrefix."_BG.png) !important";
    }else{
        echo " ";
    }
};

在 CSS 中,我使用 hasBGIMG() 函数。

body{
background-color: <?php echo $bodyBGColor.' !important' ?>;
background: <?php hasBGIMG(); ?>;
}

我第一次创建和使用该函数时效果很好,但是当我将 $bodyBGIMG 的值更改为 true 时,CSS 文件仍然显示 false 的值。

这是css文件中的输出:

body{
background-color: rgb(67,142,169) !important;
background:  ;
}

我在文件中还有其他行为相同的函数。我什至可以将新变量和函数添加到文件中,它们会被正确解析,但任何旧函数都会保留它们的旧值。

关于为什么函数不查看更新的变量或样式表为什么保留旧值的任何想法?

谢谢

4

4 回答 4

2

函数定义中的变量 $bodyBGIMG 是函数的局部变量(不是全局变量)。因此,您必须调用全局 $bodyBGIMG 或将其作为函数参数传入:

使用全局变量的解决方案:

// Variable $hasBGIMG must be defined before the global keyword is called.
function hasBGIMG(){
    global $bodyBGIMG;
    if($bodyBGIMG){
        echo "url(../img/".$adPrefix."_BG.png) !important";
    }else{
        echo " ";
    }
};

将值传递给函数的解决方案:

function hasBGIMG($bodyBGIMG){
    if($bodyBGIMG){
        echo "url(../img/".$adPrefix."_BG.png) !important";
    }else{
        echo " ";
    }
};

后来:

// Variable $bodyBGIMG must be defined before function hasBGIMG is called.
background: <?php hasBGIMG($bodyBGIMG); ?>;
于 2013-07-29T04:50:49.197 回答
1

与 JavaScript 不同,PHP 中的变量不会“级联”成函数。

要访问$bodyBGIMG函数内部的变量,您需要将其作为参数传递,或者使用以下命令启动函数:

global $bodyBGIMG;
于 2013-07-29T04:51:09.310 回答
1

与 Javascript 不同,PHP 不是一种支持词法范围的语言(在闭包定义上使用 use 子句除外)。如果要访问函数内部的变量,则必须将它们传递给函数。

$bodyBGColor = 'rgb(67,142,169)';

// Has background Image for body element
// Type: Bool
$bodyBGIMG = false;

function hasBGIMG($bodyBGIMG, $adPrefix){
    if($bodyBGIMG){
        echo "url(../img/".$adPrefix."_BG.png) !important;";
    }else{
        echo " ";
    }
};
于 2013-07-29T04:51:30.857 回答
1

你在这里犯了两个错误。

1.您没有将变量作为函数参数传递,因此它总是评估为假。

2.;在函数结束时。

 $bodyBGIMG = false;

function hasBGIMG($bodyBGIMG,$adPrefix){
    if($bodyBGIMG){
        echo "url(../img/".$adPrefix."_BG.png) !important";
    }else{
        echo " ";
    }
}

PHP中的全局变量被认为是不好的做法吗?如果是这样,为什么?

于 2013-07-29T04:52:15.507 回答