2017-08-16 40 views
0

我在packagist.org上有一個PHP庫,它使用了一些常量,從項目變爲項目。PHP與作曲家一起使用常量的正確方法

我試圖使用常量這樣的:

  • 常量存儲在conf.php在作曲家libriary

  • 作曲家初始化的用戶名/ MYLIB命令,我製作從/vendor/username/mylib/conf.php複製到本地/conf.php並將其用於當前項目配置

爲PROJECT1,在/conf.php

define("HOST", "host1.com"); 

項目2,在/conf.php

define("HOST", "host2.com"); 

但它看起來像一個錯誤的方式。

在composer庫中使用常量的正確方法是什麼?

+0

剛一說明,在*正確*的方式可以被歸類爲SUBJ ective。 – Script47

+0

一種方法是用配置數組創建你的類的實例(有點像Guzzle,還有更多)。國際海事組織你永遠不應該有任何需要在作曲家插件做出的變化。它使他們更新絕對地獄。 – h2ooooooo

+0

@ h2ooooooo,好點,但我仍然需要在某處存儲配置,並提供配置指令 – Andrei

回答

0

我喜歡做這樣的方式略有不同,我libabry

我將不得不
/vendor/vendorname/pkg/config/system.php
/vendor/vendorname/pkg/config/local.sample.php

,並提供指導,以複製

/vendor/vendorname/pkg/config/local.sample.php

/config/local.php

然後在我的代碼我會像

$sysconffile = static::$vendorbasedir . '/config/system.php'; 
    if (file_exists($sysconffile)) { 
     $sysconf = require $sysconffile; 
    } else { 
     throw new \RuntimeException('Sys Conf Missing!'); 
    } 

    $localconf = []; 
    $localconfile = static::$appbasedir . '/config/local.php'; 
    if (file_exists($localconfile)) { 
     $localconf = require $localconfile; 
    } 

UPDATE:

我也喜歡靜態類超過定義的數據,作爲一個定義是在文檔類型提示和過寫很寬鬆..

所以一旦我有兩個配置的,我平時做

static::$config = array_replace_recursive($sysconf, $localconf);