2012-05-21 215 views
1

我使用LessPHP(v0.3.4-2),阅读文档并搜索这个基本问题,但仍未找到正确和直接的答案。用PHP覆盖LessPHP变量

这里是我的.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变量不被过度纠缠?

任何答案或提示表示赞赏。

回答

2

为什么不能像.color一样执行@bgcolor

如果@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一样。

+0

是的,我知道这将工作。我只是想知道为什么变量没有被过度纠缠,只是因为我错过了那里的某些东西。但是,如果这实际上是LessPhp的工作方式,我将使用参数。 – qaharmdz

+0

更新了对问题的解释,希望它有道理! – cchana

+0

谢谢,现在理解并理解它:) – qaharmdz