代码之家  ›  专栏  ›  技术社区  ›  Matthew Goulart

如何在类中包含定义常量的文件(及其范围)

  •  5
  • Matthew Goulart  · 技术社区  · 10 年前

    假设我们有以下内容:

    一些类.php

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

    configuration.inc

    const SOMECONST = 1;
    const SOMEOTHERCONST = 2;
    

    我想做这样的事情:

    一些类.php

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

    现在这起作用了,但常量没有在类的范围内定义( echo some::SOMECONST; )而是在全球范围内( echo SOMECONST; )

    真的真的 希望在另一个文件中保存常量,因为在我的情况下这很有意义。有没有方法在类的范围内声明常量?我知道这是不可能的 includes requires 在类定义中,所以我不知所措。

    3 回复  |  直到 10 年前
        1
  •  6
  •   maxhb    10 年前

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

    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
  •  1
  •   Progrock    10 年前

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

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

    但这不是很明确。配置上没有合同。

        3
  •  0
  •   Matthew Goulart    10 年前

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