簡體   English   中英

我可以在類中設置常量然后在PHP外部訪問它嗎?

[英]Can I set a constant in a class then access it outside in PHP?

我正在嘗試初始化類中的一些值並將它們保存在常量中並在我的代碼的不同部分中訪問它們。

<?php

class Config {

  public static function initialize() {
    define('TEST',"This is a Constant");
  }

}

$config = Config::initialize();
// do something with the constants

我可以在外面訪問嗎?

Class常量使用const關鍵字。 您沒有使用define函數定義它們。 像這樣:

class Config {
        const TEST = "This is a constant";
}

// then use it:
var_dump(Config::TEST);

在PHP中,您無法動態設置常量的值,但您可以使用公共靜態變量獲得類似的行為。 即。

class Config2 {
    public static $test = null;
    public static function initialize()
    {
        self::$test = "This is not a constant";
    }
}

// Then use like
Config2::initialize();
var_dump(Config2::$test);

缺點是,沒有什么能阻止其他代碼從類外部設置值。 如果需要對此進行保護,則應使用getter函數方法。 例如。

class Config3 {
    private static $_test = null;
    public static function initialize()
    {
        self::$_test = "This is not a constant, but can't be changed outside this class";
    }

    public static function getTest()
    {
        return self::$_test;
    }
}

// Then use like
Config3::initialize();
var_dump(Config3::getTest());
class Config {
  const TEST = "This is a Constant";

  static public $test = "This is a static property test."
  static protected $test2;

  public static function initialize() {
      self::$test2 = 'initialized';
      return self::$test2;
  }

  public static function getTest2()
  {
      return self::$test2;
  }
}

echo Config::TEST; // outputs This is a Constant
echo Config::$test; // outputs This is a static property test.
echo Config::initialize(); // outputs initialized;
echo Config::getTest2(); // outputs initialized;

如果需要動態設置值,則不希望使用常量來使用靜態屬性。 如果您只希望Config類能夠直接操作此屬性的值,則使用privateprotected關鍵字。 如果這是一個非問題,那么你可以使用public財產。

另一種可能最強大的方法取決於您嘗試實現的方法是使用常量來訪問類的靜態或實例特定屬性:

class Config
{
  const TEST = 0;
  const TEST2 = 1;

  protected static $conf = array();

  public static function initialize($testVal, $test2Val)
  {
    $conf[self::TEST] = $testVal;
    $conf[self::TEST2] = $test2Val;
  }

  public static function get($key)
  {
     if(isset(self::$conf[$key])
     {
       return self::$conf[$key];
     }
  }
}

Config::initialize('Test', 'Test 2');
echo Config::get(Config::TEST);
echo Config::get(Config::TEST2);

不是來自原始代碼。 但是以下內容可以作為常量類變量。

class Config {
    const TEST = "This is a Class Constant";
...
}

從包含Config類聲明的任何地方訪問,如:

echo Config::TEST;

是的 - 您可以將其作為Config::TEST訪問

在這種情況下,您可能只需要一個帶有getter方法或類常量的private變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM