Массив функций - PullRequest
       9

Массив функций

4 голосов
/ 08 мая 2011

Мне было интересно, нормально ли это, если я сохраню набор функций в массиве, подобном этому

$f = array(
   'functions1' =>
     array(
      'somefunction',
       array($this, 'someclassfunction'),
       array($this, 'someotherfunction'),
     ),
   'functions2' =>
     array(
      'somefunction',
       array($this, 'someclassfunction'),
       array($this, 'someotherfunction'),
     ),

   ...

);

и назовите их позже как:

foreach($f as $key => $func)
  call_user_func($func)...

Если я сделаю print_r($f), я получу огромный массив с множеством переменных от всех этих функций. Это как-то влияет на производительность?

Ответы [ 3 ]

2 голосов
/ 08 мая 2011

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

2 голосов
/ 08 мая 2011

Вообще все нормально.Это может зависеть от того, как заполнен массив - если он жестко запрограммирован, то на практике вы не можете сделать его «слишком большим».Если он генерируется динамически, вы можете проверить, насколько большим он может быть, и если размер становится проблемой, переключитесь на метод инкрементальной обработки.

Вы можете получить точную оценку того, сколько памяти занимает массивВызов memory_get_usage дважды в вашем скрипте (до и после выделения массива) и вычисление разницы.

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

2 голосов
/ 08 мая 2011

Если $f действительно большой, он будет использовать вашу оперативную память. print_r фактически печатает свойства объекта. Я вижу, что вы используете $ это несколько раз, и, вероятно, поэтому ваш результат огромен. Документация PHP гласит:

print_r (), var_dump () и var_export () также покажет защищенные и частные свойства объектов с PHP 5. Статических учеников не будет показано на рисунке.

$ это представляется только один раз в памяти, то есть производительность снижается.

call_user_func сам по себе не так быстр, как непосредственный вызов функции.

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