2011-11-03 199 views
0

我最近開始使用類。我一直在使用程序化編程,因此它有點具有挑戰性。PHP類和全局變量

我的問題。

如果我有這樣一個類:

class Example { 

    public $name; 
    public $whatever; 
    public $yearAdded 

    public function __construct($name, $whatever=NULL, $dateAdded) 
    { 

    some trival code here; 

    } 


} 

我怎樣才能讓$yearAdded使用全局變量我在另一個腳本設置別的地方?

例如:

global $currentYear = date('Y'); 

我會做這樣

new example($name, $whatever, $currentTime); 

還是有辦法在類中指定要始終使用​​爲$yearAdded

回答

2

global關鍵字不符合您的想法。它不會使變量具有全局範圍。它所做的就是指定你調用它的函數,以便在外部範圍中使用該變量。

例如:

$a="test"; 

function something() { 
    global $a; 
    echo $a; //Outputs: test 
} 

如果你想使一個變量全球以便它可以從一個類中訪問,你需要使用$GLOBALS超全局。

http://www.php.net/manual/en/reserved.variables.globals.php

這不被認爲是做事的最佳OOP方式,但會完成這項工作。

+0

您認爲根據您的經驗,最好將這些超級全局變量用於當前時間戳之類的內容,還是最好保留特定於類的某種信息。我知道我提供的例子有點抽象。 – Hugo

+0

什麼會被認爲是最好的OOP方式呢? – Hugo

+1

@Hugo,最好的做法是構建類,以便它們是通用的,以便在構造函數中傳遞他們需要的任何東西。然後,對於每個功能,除了傳遞任何參數作爲參數。我打破這個規則的唯一時間就是數據庫連接或配置選項。純粹主義者會說即使這些也應該被通過,他們是對的。 – Brad

0

你已經有了一個內建的time()函數,那麼爲什麼你需要在你的構造函數中使用一個自制的全局變量?

如果您仔細考慮如何使用全局變量,您會發現訪問相同信息通常有更好的方式 - 例如,系統環境變量,配置文件等。

+0

的推理是幾乎所有在系統中發生的事情都會被添加到數據庫中。示例:作業被髮布到系統中,在數據庫中我有一個名爲dateAdded的字段,其中包含2011-10-01 12:22:00(NOW)。但是例如,數據庫與用戶的時區不同,因此我必須考慮時區。所以我爲那個擁有當前時間和日期的用戶設置了一個全局變量。不知道這是否是最佳的方式...所以我願意接受建議! – Hugo

+0

'time()'函數產生通用的unix時間(UTC)。如果您查看Date(),那麼使用'o'格式標誌調用'year'會爲您提供一個與時區無關的UTC年。參見[link] http://php.net/manual/en/function.date.php。 – rsj

+0

@rsj,您將無法保證數據庫服務器和Web服務器的時鐘同步。即使他們都使用NTP,也會發生錯誤。 – Brad