【问题标题】:PHP the right way to use constants with composerPHP 在 composer 中使用常量的正确方法
【发布时间】:2018-01-24 19:17:55
【问题描述】:

我在 packagist.org 上有一个 PHP 库,它使用一些常量,从一个项目到另一个项目。

我正在尝试使用这样的常量:

  • 作曲家库中conf.php中的常量存储

  • composer init username/mylib 命令之后,我从 /vendor/username/mylib/conf.php 复制到本地 /conf .php 并将其用于当前项目配置

对于 project1,在 /conf.php

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

project2,在 /conf.php

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

但它看起来像一个错误的方式。

在作曲家库中使用常量的正确方法是什么?

【问题讨论】:

  • 请注意,正确的方式可以归类为主观的。
  • 一种方法是使用配置数组创建您的类的实例(有点像 Guzzle 和更多这样做)。 IMO 您永远不应该在作曲家插件中进行任何更改。这使得更新它们绝对是地狱。
  • @h2ooooooo,好点子,但我仍然必须将配置存储在某个地方,并提供配置指令
  • @h2ooooooo 这正是我的做法,请参阅下面的答案。
  • @DarkMukke 我的做法是$instance = new MyClass(['requireLogin' => true, 'baseUrl' => 'http://www.foo.bar/']); 等等。

标签: php composer-php packagist


【解决方案1】:

我更喜欢用稍微不同的方式来做这件事

在我的库中,我会有
/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;
    }

更新:

我也更喜欢带有数据而不是定义的静态类,因为定义在文档、类型提示和可重写方面非常松散..

所以一旦我有两个配置,我通常会这样做

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2017-10-03
    • 1970-01-01
    相关资源
    最近更新 更多