用 PHP 覆盖 LessPHP 变量


Overwriting LessPHP variable with PHP

我使用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 变量没有被覆盖?

任何答案或提示都值得赞赏。

为什么不@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一样。