2013-02-02 110 views
0

我對PHP OOP是一種新手,但我對OO背後的概念有相當不錯的理解。我想要一個配置文件,它具有可以在整個應用程序中使用的通用應用程序數據。很正常,但我不確定如何做到這一點。我不想創建一個類,然後需要這個類,擴展它,或者需要每個類中的配置文件。我的配置文件看起來是這樣的:在php類中使用配置文件

<?php 

$configs = array(
    'pagination' => 20, 
    'siteTitle' => 'Test site', 
    'description' => 'This is a test description', 
    'debug' => true 
); 

?> 

,我能想到的這個做的唯一的事情是:

<?php 

class user { 
    public function __construct() { 
     require 'config.php'; 
     if(configs['debug']) { 
      echo 'Debugging mode'; 
     } 
    } 
} 

?> 

我用這種方法看到的問題是,我將不得不在我想要使用的每個類中手動包含此配置文件,這似乎是多餘的。理想情況下,我希望將文件包含在絕對根路徑中,然後能夠使用任何類中的任何值,但是如果您只需要類之外的文件,則該類將無法訪問這些值。我也不想創建一個配置類,然後每個需要值的類讓它們擴展配置類。這又似乎是多餘的。

不知道我是否很有道理我只是想要一種簡單的方法來在每個類中傳遞配置值並使用它們而不必輸入過多的冗餘代碼。

在此先感謝!

+2

使用引導文件和負載你的配置在裏面。 – Havelock

+0

指向一些引導指針的指針:http://stackoverflow.com/questions/3313950/php-bootstrapping-basics – Carl

+0

在頂部包含'config.php',然後訪問$ GLOBALS ['config'] ['debug'] any其中 – 2013-02-02 08:27:59

回答

0

在一個類(config.php)中聲明變量,然後在另一個類中使用它是不好的做法。您應該從配置文件中返回配置數組,然後您可以將其分配給一個變量,或根據需要將其作爲參數傳遞。

嘗試是這樣的:

的config.php:

<?php 
return array(/* ... config values ... */); 

user.php的:

<?php 
class User { 
    private $config; 

    public function __construct(array $config) { 
     $this->config = $config; 
     if ($this->config['debug']) { 
      // debug 
     } 
    } 

    public function someOtherMethod() { 
     if ($this->config['debug']) { 
      // debug 
     } 
    } 
} 

調用代碼:

<?php 
$user = new User(require 'config.php'); 
$user->someOtherMethod(); 
+0

我最終看着Wordpresses方法,並且他們使用PHP定義了我最喜歡的幫助! –