所以我有一个用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: ;
}
我在文件中有其他功能,行为方式相同。我甚至可以在文件中添加新的变量和函数,并且它们可以正确解析,但任何旧函数都保留其旧值。
有关为什么函数没有查看更新的变量或为什么样式表保留旧值的任何想法?
由于
答案 0 :(得分:2)
函数定义中的变量$ bodyBGIMG是函数的本地(非全局)。因此,您必须调用global $ 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); ?>;
答案 1 :(得分:1)
与JavaScript不同,PHP中的变量不会“级联”到函数中。
要访问函数内的$bodyBGIMG
变量,您需要将其作为参数传递,或者使用以下函数启动函数:
global $bodyBGIMG;
答案 2 :(得分:1)
与Javascript不同,PHP不是支持lexically scope的语言(在闭包定义上使用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 " ";
}
};
答案 3 :(得分:1)
你在这里犯了两个错误。
1。 您没有将变量作为函数参数传递,因此它总是计算为false。
功能结束时 2。 ;
。
$bodyBGIMG = false;
function hasBGIMG($bodyBGIMG,$adPrefix){
if($bodyBGIMG){
echo "url(../img/".$adPrefix."_BG.png) !important";
}else{
echo " ";
}
}
Are global variables in PHP considered bad practice? If so, why?