将值分配给变量私有静态类属性,该属性是类内定义的数组

问题描述:

我想访问并将值分配给私有静态类属性,并且我想使用“变量变量”的概念进行赋值。访问作品,但分配不起作用。我曾尝试以下内容:将值分配给变量私有静态类属性,该属性是类内定义的数组

class AClass { 
    private static $testArray = array(); 

    public static function aFunction() { 
     $key = 'something'; 
     $arrayName = 'testArray'; 
     $array = self::$$arrayName; 
     // accessing: 
     $value = $array[$key]; // This works, $value holds what self::testArray['something'] holds. 


     // assigning: 
     // version 1: 
     $array[$key] = $value; // No error, but self::testArray['something'] does not get updated 

     // version 2: 
     self::$$arrayName[$key] = $value; // Error 
    } 
} 

另外:我有一些麻烦提出了一个精确和简洁的标题。如果你觉得你理解我的问题,并可以想出一个更好的标题,请认为它!

+0

对于第1版,你的数组可能是静态数组的一个副本,因此分配将只在本地副本。对于第二版,你是否尝试过类似'self :: $ {$ arrayName} [$ key]'?我认为在优先顺序上有失败 – MatRt

+0

@MatRt:我没有尝试过它,它的工作!非常感谢。如果你把它写成一个,我会接受它作为答案。另外:为什么这个工作?我以为我知道php很好,但我从来没有见过类似的东西。 – DudeOnRock

+0

添加了我的评论,你可以标记你的最佳答案。继续... :) – MatRt

对于第1版,

你的数组可能是静态数组的一个副本,因此分配将只在本地副本。 由于PHP 5中,对象是通过引用传递,默认情况下,但我认为阵列仍通过复制传递(除非有&你具体参考) - 不是100%地肯定这一点

对于第2版,

你应该尝试self::${$arrayName}[$key]

有一个优先次序的问题,你想PHP来解释[]之前评估你的“变种的变种”。如果没有{},PHP是试图评估类似

self::${$arrayName[$key]} 

,而不是

self::${$arrayName}[$key] 

<?php 

class AClass { 
private static $testArray = array('something'=>'check'); 

public static function aFunction() { 
    $key = 'something'; 
    $arrayName = 'testArray'; 
    $array = self::$$arrayName; 
    // accessing: 
    $value = $array[$key]; // This works, $value holds what self::testArray['something'] holds. 

    // assigning: 
    // version 1: 
    $array['something'] = 'now'; // No error, but self::testArray['something'] does not get updated 

    //updated value; 
    // need to assgig the value again to get it updated ...... 

    /* 
     **if $a = '10'; 
     $b = $a; 
     $b = 20 ; // will it update $a ..?? ANSWER is NO 
     same logic applies here** 

     if you use $b = &$a ; then case is different 
     */ 

    self::$$arrayName = $array; 

    print_r(self::$$arrayName); 

    // version 2: 

    // since you are using the key also you have to keep arrayName seperate "note {}" 
    self::${$arrayName}[$key] = $value; 


    print_r(self::$$arrayName); 
} 
    } 

    $obj = new AClass(); 
    $obj->aFunction(); 

    ?> 
+0

希望它可以帮助你.. – alwaysLearn