2013-06-19 2 views
1

Я работаю с некоторым существующим кодом, в частности с плагином загрузки файлов JQuery. Существует один большой класс, и внутри него есть некоторые функции, которые я пытаюсь настроить. Проблема в том, что есть несколько строк кода, которые не имеют для меня никакого смысла.PHP Array Функция внутри класса Confusion

protected function get_file_object($file_name) { 
    //whole bunch of code is here that generates an object file file size 
    //and other information related to the image that was in the array. 
    //removed the code to be concise, just know it returns an object. 
     return $file; 
} 


protected function get_file_objects() { 
     return array_values(
     array_filter(
     array_map(
      array($this, 'get_file_object'), 
      scandir($this->options['upload_dir']) 
     ))); 
} 

Хорошо, поэтому я не понимаю, что происходит внутри array_map. Я знаю, что карта массива принимает обратный вызов, а затем массив как аргументы. scandir захватывает массив из каталога.

Его обратный вызов, который не имеет для меня никакого смысла. Я посмотрел на синтаксис функции array() в документации php, и он ничего не сказал о принятии двух аргументов, подобных этому. очевидно, вторая - это функция, которая находится в кавычках? Я понимаю, что делает код, а не как его делать.

Это некоторые недокументированные функции?

+0

Это ссылка обратного вызова метода объекта. Вместо просто функции вы должны передать ссылку на объект '$ this' и имя функции в виде кортежа (массив из 2 частей). Тот факт, что это внутри класса, должен быть раскрыт в вопросе, хотя это очевидно из использования модификаторов '$ this' и' protected' для функций (методов). – Orbling

+0

Извините, что отнесен к классу. Будет добавлено, что –

ответ

4

Первый аргумент array_map - это callable. Одна из вещей, вызываемых - это массив, в котором первый элемент представляет экземпляр (или имя класса, если метод является статическим), а второй - имя метода. Таким образом, array($this, 'get_file_object') ссылается на get_file_object текущего экземпляра ($this - текущий экземпляр).

+1

В принципе, 'array ($ this, 'get_file_object')' является «обратным вызовом» синтаксиса для '$ this-> get_file_object' :-) –

+0

@RocketHazmat да, это немного проще :) –

Смежные вопросы