【问题标题】:php convert string to static variablephp将字符串转换为静态变量
【发布时间】:2014-09-05 20:04:47
【问题描述】:

我不太清楚如何描述我的问题,但这是我想做的: 我想转义语言变量并将它们转换为静态变量。像这样的

public static $languages = array('nl', 'en');
public static $nl;
public static $en;

public function __construct(){
    foreach(self::$languages as $lang){
        self::{$lang} = $content[$lang];
    }
}

我知道这样的非静态变量是可能的:

$this->{$lang} = $content[$lang];

但我在尝试将其转换为静态变量时经常出错。 有没有办法做到这一点?还是在php中不可能?

【问题讨论】:

  • self::${$lang} = $content[$lang] 应该适用于静态。
  • __construct() 不会被静态变量或方法调用。您可能正在寻找单例模式。这只是一种配置存储机制吗?

标签: php class static-variables


【解决方案1】:

不,你不能这样做,即使使用self::${$lang} = ... 你也会得到 PHP 致命错误:

致命错误:访问未声明的静态属性:第 9 行 test.php 中的 MyClass::$lang

但是,您确定要使用静态属性吗?我假设您在实例化对象时将$content 数组传递给构造函数。如果 $content 中的值特定于该特定对象,则应将这些值存储到对象属性而不是静态属性中。

【讨论】:

    【解决方案2】:

    你有几个问题。:

    1. 类 var 必须是常量表达式。数组定义不是。
    2. 使用 $ 访问静态变量。
    3. $content 未定义。

    举例来说,这是可行的:

    public static $nl;
    public static $en;
    
    public function __construct(){
        $languages = array('nl', 'en');
        foreach($languages as $lang){
            //self::${$lang} = $content[$lang];
            self::${$lang} = time();
            echo self::${$lang};
        }
    }
    

    【讨论】:

    • 这行得通,谢谢!正是我想要的! p.s. $content 已定义,但我只是没有将其包含在问题中;-)
    【解决方案3】:

    不,您不能在 php 中动态创建静态变量。你可以在这个帖子Is it possible to create static variables on runtime in PHP?中找到类似的回复

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 1970-01-01
      • 2019-04-14
      • 2010-09-30
      • 2018-02-08
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多