2009-01-18 42 views
-1

我使用PHP類用於登錄目的。對於用戶的登錄過程檢查是這樣定義的MySQL數據庫:PHP中的一個類的var

class flexibleAccess{ 

    var $dbName = 'mydatabase'; 

然而,當我安裝不同的人應用,這$ DBNAME需要不斷的變化。我決定做一個配置文件,在那裏我保存我的數據庫信息,所以我將不得不改變那裏女巫更容易,因爲這個登錄類是「隱藏」的地方。問題是我想要做這樣的事情:

class flexibleAccess{ 

     var $dbName = $_SESSION['mydatabase']; 

而我得到的錯誤:「解析錯誤:路徑 /access.class.php在線43分析錯誤」 線43是與$ dbName行...爲什麼我不能使用它來動態從會話中獲取我的值?我該如何使用它?

感謝

回答

2

做一個constructor(在這裏我假設PHP5 ...)

class flexibleAccess{ 

    private $dbName; 

    function __construct() { 
     $this->dbName = $_SESSION['mydatabase']; 
    } 
} 

對於PHP4,用類的名稱,而不是替換__construct。

+0

此代碼假定您的db名稱將始終來自會話。對我來說看起來像硬編碼。爲什麼不把它作爲參數傳遞給構造函數 – 2009-01-18 16:30:46

+0

OP在會話中需要它,所以這就是我演示的。 – 2009-01-18 17:01:45

1

你必須在類的構造函數這個變量指定爲PHP 4 only allows constant values as initializers

In PHP 4, only constant initializers for var variables are allowed. To initialize variables with non-constant values, you need an initialization function which is called automatically when an object is being constructed from the class. Such a function is called a constructor (see below).

0

或者,也可以在類應該閱讀,而調用類,例如這樣的信息:

<?php 
$login = new flexibleAccess(); 
$login->dbName = $_SESSION['mydatabase']; 
?> 

這樣您的班級保持清潔,並且可以接受您喜歡的任何來源或方法的數據庫名稱(以及任何其他可能會有所不同的信息)。作爲一個額外的好處,你不必注意你使用的是哪個版本的PHP,它在兩者中都能正常工作。

希望這會有所幫助!

-Dave

+0

我看到我的回答落選,這種方法不推薦?如果是這樣,我很想知道,所以我可以從中學習。謝謝! – Dave 2009-01-19 04:53:40

4

您可能不應將數據庫配置放入會話中。我感覺有點冒險。

我將創建與信息的配置文件,包括它以恆定:

dbconfig.php:

constant("DBNAME", 'mydatabase'); 

flexibleaccess.php:

require_once 'dbconfig.php'; 

class flexibleAccess { 
    private $dbname; 

    // set the default database name to the constant DBNAME 
    // but allow override 
    public function __construct ($dbname = DBNAME) 
    { 
    $this->dbname = $dbname; 
    } 
} 

任何需要的文件數據庫訪問:

require_once 'flexibleaccess.php'; 

$db = new flexibleaccess(); 

當然,您不需要將其設置爲常量。關鍵是你將配置放在與你的代碼不同的文件中。