用PHP覆盖LessPHP变量

时间:2012-05-21 01:08:12

标签: php less

我使用LessPHP(v0.3.4-2),阅读文档并搜索此基本问题,但仍未找到正确答案。

这是我的.less文件:

@bgcolor :#ccc; 
.color(@color:#222) { color:@color; }

body {
  margin:10px auto;
 .color(@color);
 background:@bgcolor;
}

我的PHP代码:

<?php
include 'lessc.inc.php';

$style_setting = array (
  'color'       => '#f00',
  'bgcolor'    => '#fee'
);

$cssFile    = "stylesheet.css";
$lessFile    = new lessc("less/stylesheet.less");
file_put_contents($cssFile, $lessFile->parse(null, $style_setting));
?>

样式表结果:

body {
  margin:10px auto;
  color:#ff0000;
  background:#cccccc;
}

正如您在上面的示例中所看到的,LesPHP参数( .color(@color:#222))已被覆盖,但 @bgcolor 变量未被覆盖。

只是想知道LessPHP是如何工作的,还是我错过了什么?为什么LessPHP变量没有被覆盖?

感谢任何答案或提示。

1 个答案:

答案 0 :(得分:2)

为什么不将@bgcolor.color的实现相同?

如果以下内容适用于@color

.color(@color:#222) { color:@color; }

然后以下内容适用于@bgcolor

.bgcolor(@bgcolor:#ccc) { background:@bgcolor; }

更新,对正在发生的事情的解释:

我们假设这都是用PHP编写的,这就是.color 函数的样子:

function color($color = null) {
    if(!$color) {
        return 'color: #222;';
    }
    return 'color: $color;';
}
echo color(); //outputs "color: #222222;"
echo color('#f00'); //outputs "color: #ff0000;"
echo color(); //outputs "color: #222222;"

传递颜色值或输出默认值。现在,这就是@bgcolor 变量

所发生的情况
$bgcolor = '#fee';
$bgcolor = '#ccc';
echo 'color: '.$bgcolor.';'; //outputs "background: #cccccc;"

它们的关键区别在于.color是一个可以取值而且@bgcolor是变量的函数。

你已经有效地定义了你想要的东西,立即覆盖它然后调用变量。使其成为动态的唯一方法是将其变为“函数”,就像使用color一样。