如何在类(及其作用域)中包含定义常量的文件


How to include a file that defines constants in a class (and it's scope)

假设我们有以下内容:

一些.class.php

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

配置.inc

const SOMECONST = 1;
const SOMEOTHERCONST = 2;

我想做这样的事情:

一些.class.php

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

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

真的很想在另一个文件中拥有常量,因为它在我的情况下很有意义。有没有办法在类的作用域中声明常量?我知道不可能在类定义中使用includesrequires,所以我不知所措。

最简单的可能性是在一个类中定义常量,并让另一个类扩展该类。

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自动加载器,则可以轻松地将其拆分为两个不同的文件。

像这样简单的事情怎么样:

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');

配置.php

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

不过不是很明确。 配置上没有协定。

简单地说,没有对 php 的扩展是不可能的。我最终只是在类文件中定义了 consts 本身。