ключ php foreach как переменная класса - PullRequest
1 голос
/ 29 сентября 2011

Может кто-нибудь сказать мне, если этот метод выполнения foreach имеет недостатки?

class someclass {
  function foo() {
    foreach ($my_array as $this->key => $this->value) {
      $this->bar();
      $this->baz();
    }
  }
  function bar(){
    //do something with $this->key or $this->value
  }
  function baz(){
    //do something with $this->key or $this->value
  }
}

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Это довольно неэффективно, поскольку вы по сути устанавливаете ключ для ассоциативного массива в каждом цикле.Я бы оставил их локальными, а затем назначил бы их, когда цикл завершится, если вам нужно их сохранить.Также передайте значения методам при их вызове.

class SomeClass {
    function foo($myArray) {
       foreach ($myArray as $key => $value){
           $this->bar($key);
           $this->baz($value);
        }
        $this->key = $key;
        $this->value = $value;
     }
    function bar($key){
     //do something with $this->key or $this->value
    }
    function baz($value){
     //do something with $this->key or $this->value
    }
 }
0 голосов
/ 29 сентября 2011

Если вам нужно, чтобы ключи и значения были публично доступны в ваших методах, я бы выбрал:

class someclass{
    function foo($my_array){
       foreach ($my_array as $key => $value){
           $this->loopArray[$key] = $value;
           $this->bar();
           $this->baz();
        }

     }
    function bar(){
        //do something with $this->key or $this->value

    }
    function baz(){
        //do something with $this->key or $this->value
    }

 }

 $obj = new someclass();
 $my_array = array('value1','value2');
 $obj->foo($my_array);
 var_dump($obj->loopArray);

Выходы:

array (2) {[0] => строка (6) "значение1" [1] => строка (6) "значение2"}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...