【问题标题】:How to set a variable to constant defined using "const" keyword?如何将变量设置为使用“const”关键字定义的常量?
【发布时间】:2017-10-09 06:14:17
【问题描述】:

我需要将array 存储到一个常量中。我正在使用 PHP 5.6,所以不能使用 define。我正在从数据库中获取这些数据。

它适用于 -

const VAR_DATA = array(1, 2, 3);

但是当我这样做时 -

$var = array(1, 2, 3);
const VAR_DATA = $var;

它给了我语法错误。

我怎样才能做到这一点?

不重复,因为该问题没有回答如何实现这一目标。对于常规数组,它可以工作,但是当我使用变量时,它会给我错误。

【问题讨论】:

  • 不能使用define?为什么?
  • define 可用于 PHP 7 及更高版本。 5.5 不支持。 @u_mulder。 define 5.6 上不支持字符串数组
  • 所以,答案是你无法实现你所需要的。
  • @u_mulder 如果不可能,我正在寻找解决方法。尽量避免serialize或其他方法。

标签: php laravel constants


【解决方案1】:

你可以这样保存数组

define('VAR_DATA', implode(',',array(1, 2, 3)));

无论你想在哪里使用它,只需将它爆炸

$array = explode(',',VAR_DATA);

【讨论】:

    【解决方案2】:

    值必须是常量表达式,不是(例如)变量、属性或函数调用。请参阅http://php.net/manual/en/language.oop5.constants.php

    你可以像这样用 const 定义一个常量,const SOMEVAR = [1,2,4]

    【讨论】:

    • 这是评论而非答案。
    • 试试这个,const SOMEVAR = [1,2,4] 或 const SOMEVAR = array(1,2,4) @sougata bose
    【解决方案3】:

    来自Document

    PHP 5 中,值必须是标量值(整数、浮点数、字符串、布尔值或 NULL)

    如果不先序列化对象和数组,就不能将它们存储在常量中

    【讨论】:

      【解决方案4】:

      假设你的 const 是在一个类(下面称为 VarClass)中声明的,你可以有公共静态访问而不是 const:

      class VarClass
      {
          public static function VAR_DATA()
          {
              return $your_data_here;
          }
      }
      

      甚至

      class VarClass 
      {
          public static $VAR_DATA;
      }
      

      并在您从数据库中检索到它后设置它:

      VarClass::$VAR_DATA = $your_data;
      

      然后得到它:

      $get_data = VarClass::$VAR_DATA;
      

      我正在从数据库中获取该数据。

      如果你从数据库中获取数据数组,那你为什么认为它是一个常量呢?显然,它在您的代码执行中的某个时刻出现。从那里开始,您希望将其视为不可变数据。

      上面的解决方案解决了访问问题,但没有解决不变性。使用 Singleton 可能会有所帮助,但在您的场景中可能会过大。

      【讨论】:

      • 该数组将在多个类、多个函数中多次使用。我想避免函数调用和所有的变化。如果我可以在中间件中定义常量,或者在不更改函数调用的情况下存在和访问常量
      • 上面的方案解决了访问问题,但没有解决不变性。使用 Singleton 可能会有所帮助,但在您的场景中可能会有点过头了。 是的..
      • 所以你基本上有使用 VAR_DATA const 的遗留代码,但它实际上不再是 const,因为同时要从数据库中获取数据。但是,您不想更改遗留代码?
      • 是的。那种。现在我将为此使用serialize
      【解决方案5】:

      您可以像这样将数据保存在 .env 中

      .env 文件

      VARIABLE_NAME=Value1,Value2,Value3
      

      配置/app.php

      return [
        'VARIABLE_NAME' => explode(',', env('VARIABLE_NAME'))
      ];
      

      希望它能解决你的问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-06
        • 2021-11-01
        • 2013-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多