2017-01-22 2 views
0

Я изучаю (ну, пытаюсь) ООП, и у меня есть один простой и, возможно, очень глупый вопрос. Мне нужно получить некоторые данные из очень «глубокого» массива. Если бы я должен был использовать процедурный подход, я бы объявить переменную, как это, просто ради удобства чтения:PHP - Пока/foreach в классе: застрял, не могу понять, что делать

foreach ($my_array as $single) { 

     $readable = $single['level_1']['level_2']['level_3']['something']; 

    } 

И в то время как внутри этого Еогеасп, я мог бы использовать $readable как мне нравится. Сейчас я пытаюсь построить класс, и мне нужно обработать тот же массив. Я был бы соблазн сделать что-то вроде этого, чтобы сделать вещи более ясно:

class MyClass { 

protected $my_array = null; 

protected function myCustomIncrement() { 

    return $readable++; 

} 

public function myCustomOutput() { 

    foreach ($this->my_array as $single) { 

     $readable = $single['level_1']['level_2']['level_3']['something']; 

     return $this->myCustomIncrement(); 

    } 


} 

} 

$test = new MyClass; 
echo $test>myCustomOutput(); 

Но в то время как внутри myCustomIncrement() как $readable или $this->$readable результат не определен. Вероятно, я пытаюсь сделать что-то действительно глупо, поэтому я хотел бы попросить о помощи: как я могу использовать foreach или сохранять чистый/удобочитаемый/поддерживаемый код? Или, может быть, я должен использовать другой подход?

Заранее благодарен!

ответ

1

Вам необходимо передать $readable значение в myCustomIncrement() и у вас его количество увеличилось. Так что ваши myCustomIncrement() и myCustomOutput() методы были бы так:

protected function myCustomIncrement($readable) { 
    return ++$readable; 
} 

public function myCustomOutput() { 
    foreach($this->my_array as $single) { 
     $readable = $single['level_1']['level_2']['level_3']['something']; 
     return $this->myCustomIncrement($readable); 
    } 
} 

сделать операцию инкремента Преинкремент как return ++$readable;, не постинкремента, так что метод может возвращать обновленное значение.

+0

Просто опоясывающий элемент, позаботьтесь о инструкции 'return' внутри цикла foreach. В текущем сценарии, как только оператор 'return' попадает, элемент управления возвращается к оператору вызывающей функции. Таким образом, ваш цикл foreach будет выполняться ** только один раз **. –

+0

Спасибо! Я подумал о том, что в качестве параметра можно использовать $ readable, но я сделал это только для myCustomIncrement(). И спасибо вам большое за другие советы! – Cerere