【问题标题】:How to include a file that defines constants in a class (and it's scope)如何在类中包含定义常量的文件(及其范围)
【发布时间】:2016-01-29 14:33:12
【问题描述】:

假设我们有以下内容:

some.class.php

class
{
    public __construct()
    {
        fun_stuff();
    }

}

configuration.inc

const SOMECONST = 1;
const SOMEOTHERCONST = 2;

我想做这样的事情:

some.class.php

class
{
    public __construct()
    {
        include_once(configuration.inc);
        fun_stuff();
    }

}

现在可以了,但是常量不是在类的范围内(echo some::SOMECONST;)定义的,而是在全局范围内(echo SOMECONST;

真的真的希望将常量放在另一个文件中,因为这对我来说很有意义。有没有办法在类的范围内声明常量?我知道在类定义中使用includesrequires 是不可能的,所以我很茫然。

【问题讨论】:

  • 您将遇到的一个问题是您正试图在构造函数中执行此操作 - stackoverflow.com/questions/7145198/…
  • 在类定义中包含文件也是不可能的(即把include放在类里面,但是放在函数外面)-stackoverflow.com/questions/1957732/…
  • 这就是为什么我说“我知道不可能在类定义中使用包含或要求”
  • 我看到的唯一方法是不使用 const 而是使用普通的静态变量。您的包含文件可以更改为self::SOMEVAR = 1,它应该可以工作。
  • @Scott 我以为会,但似乎没有。它抛出一个语法错误,抱怨“=”

标签: php class oop include constants


【解决方案1】:

最简单的方法是在一个类中定义您的常量,并让您的另一个类扩展该类。

class myClassConstant {
  const SOMECONST = 1;
  const SOMEOTHERCONST = 2;
}

class myClass extends myClassConstant {

  public function __construct() {
    echo self::SOMECONST . ' + ' . self::SOMEOTHERCONST . ' = 3';
  }
}

$obj = new myClass(); // Output: 1 + 2 = 3

如果您使用的是 php 自动加载器,则可以轻松地将其拆分为两个不同的文件。

【讨论】:

  • 虽然不是我的问题的答案,但这似乎是完成我正在寻找的最合乎逻辑和最可行的方式。谢谢!
  • 恕我直言,可能是最好和最强大的解决方案。遗憾的是,特征不允许使用常量,因为这将是解决您的问题的一个非常酷且优雅的解决方案。
【解决方案2】:

像这样简单的东西怎么样:

class Foo
{
    public $config;

    public __construct($config)
    {
        $this->config = $config;
        fun_stuff();
    }

    public function Bar()
    {
        echo $this->config['baz'];
    }

}

$foo = new Foo(include_once 'config.php');

config.php

<?php
return array('baz' => 'hello earth');

虽然不是很明确。配置中没有合约。

【讨论】:

    【解决方案3】:

    简单地说,没有对 php 的扩展是不可能的。我最终只是在类文件中定义了它自己的常量。

    【讨论】:

      猜你喜欢
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2020-04-22
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多