访问常量没有自我::?

时间:2017-07-29 06:25:40

标签: php constants

我想在函数中使用一些常量,但每次使用self::引用它们都很费力且难看。有没有办法只是通过名称访问它们而不指定范围?

class My_Class {    
    const CLASS_CONSTANT = 'test value';
    private function my_function(){
         // Is there a way to access this without self::
         $a = self::CLASS_CONSTANT;
    }
}

2 个答案:

答案 0 :(得分:1)

一种可能(但很笨重)的方法是使用define()函数。这种方法的唯一问题是它在全局范围内定义变量。

以下是如何使用它:

define ('text', 'Foo Bar?!');

echo text;

将返回:Foo Bar?!

因此,要将其集成到课程中,您可以执行以下操作:

class My_Class{
  function __construct(){
      define ('CLASS_CONSTANT', 'test value');  
    }

  private function display(){
      echo CLASS_CONSTANT;
    }
}

$example = new My_Class();
$example->display();

输出:test value

请注意define()是一个函数,因此需要在函数块内部或类外执行。它不能像普通类常量一样轻松地在类的顶部声明。

答案 1 :(得分:1)

您可以使用ReflectionClass来获取类的所有常量

    $oClass = new \ReflectionClass(My_Class::class);
    $constants = $oClass->getConstants();
    foreach ($constants as $name => $value) {
        //to work
    }

更多访问:http://php.net/manual/en/reflectionclass.getconstants.php

希望它有所帮助!