2014-07-15 40 views
0

我不知道如何描述我的问题,但这里是我想要做的: 我想逃避语言变量并将它们转换为静态变量。这样php将字符串转换为静态变量

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?

+0

'self :: $ {$ lang} = $ content [$ lang]'应该适用于静态。 – Duroth

+0

'__construct()'不会被调用静态变量或方法。你可能正在寻找单身模式。这只是一个配置存储机制? –

回答

1

类似的反应你有几个问题:

  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}; 
    } 
} 
+0

这个作品,谢谢!正是我在找什么!附: $内容已被定义,但我没有在问题中包含它;-) –

-1

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

Fatal error: Access to undeclared static property: MyClass::$lang in test.php on line 9

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