2013-03-29 34 views
3

我想訪問並將值分配給私有靜態類屬性,並且我想使用「變量變量」的概念進行賦值。訪問作品,但分配不起作用。我曾嘗試以下內容:將值分配給變量私有靜態類屬性,該屬性是類內定義的數組

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

回答

2

對於第1版,

你的數組可能是靜態數組的一個副本,因此分配將只在本地副本。 由於PHP 5中,對象是通過引用傳遞,默認情況下,但我認爲陣列仍通過複製傳遞(除非有&你具體參考) - 不是100%地肯定這一點

對於第2版,

你應該嘗試self::${$arrayName}[$key]

有一個優先次序的問題,你想PHP來解釋[]之前評估你的「變種的變種」。如果沒有{},PHP是試圖評估類似

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

,而不是

self::${$arrayName}[$key] 
1
<?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