2013-04-28 60 views
0

我在寫一個簡單的類,它將爲我的站點創建一個簡單的日誌文件。出於某種原因,當我具備的功能之外可變FILE_PATH,我得到這個錯誤...解析函數外聲明的變量的錯誤

Parse error: parse error, expecting `','' or `';'' 

有了這個代碼..

class Logger { 

public $file_path = SITE_ROOT.DS.'logs'.DS.'log.txt'; 

public static function log_action ($message="") { 
    if (file_exists($file_path)) { 
     file_put_contents($file_path, $message, FILE_APPEND); 
    } else { 
     return "could not write to log file"; 
    } 
} 

但是當變量的函數內,這錯誤不會來。爲什麼是這樣?

public static function log_action ($action, $message="") { 
    $file_path = SITE_ROOT.DS.'logs'.DS.'log.txt'; 
    if (file_exists($file_path)) { 
     file_put_contents($file_path, $message, FILE_APPEND); 
    } else { 
     return "could not write to log file"; 
    } 
+4

不能使用的功能,定義類屬性時運營商,如串聯,等等。如果你想分配一個使用串聯的值,那麼請在你的類的構造函數中這樣做 – 2013-04-28 17:08:29

回答

2

內部類,PHP代碼可以運行方法是有限的:

類成員[...]是通過使用公共的關鍵字之一,保護的定義 ,或私人, 後跟一個正常的變量聲明。這個聲明可能包含一個初始化,但這個初始化必須是一個常量 值 - 也就是說,它必須能夠在編譯時進行評估,並且 必須不依賴運行時信息才能評估

Properties

因此,這是無效的:

public $file_path = SITE_ROOT.DS.'logs'.DS.'log.txt'; 
+0

謝謝!那麼當我想要在類中使用其他函數時,如何重用這個文件路徑? – 2013-04-28 17:16:25

+1

它通常會在構造函數中設置,但由於您打算在靜態方法中使用它,因此這不是一個選項。你需要從類之外設置它(畢竟它是一個公共屬性),或者讓靜態方法調用另一個靜態方法來獲取路徑。 – 2013-04-28 17:19:37