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
    }
}

また、正確で簡潔なタイトルを思いつくのに苦労しました. 私の問題を理解しているような気がして、より良いタイトルを思い付くことができたら、それを提案してください!

4

2 に答える 2

2

バージョン 1 の場合、

配列は静的配列のコピーである可能性があるため、割り当てはローカルコピーでのみ行われます。PHP 5以降、オブジェクトはデフォルトで参照によって渡されますが、配列は引き続きコピーによって渡されると思います(&で参照を指定する場合を除く)-その点について100%確信が持てません

バージョン 2 の場合、

試してみてくださいself::${$arrayName}[$key]

優先順位の問題があります。[] を解釈する前に、PHP に「var's var」を評価させたいとします。がなければ{}、PHPは次のよ​​うなものを評価しようとしています

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

それ以外の

self::${$arrayName}[$key]
于 2013-03-29T04:27:17.780 に答える
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();

  ?>
于 2013-03-29T04:23:28.793 に答える