2012-05-21 197 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