2013-06-19 3 views
1

기존 코드, 특히 JQuery File Upload Plugin을 사용하고 있습니다. 거기에 하나의 큰 클래스가 있고 그 안에는 내가 정의하려고하는 일부 기능이 있습니다. 문제는 나에게 의미가없는 몇 줄의 코드가 있다는 것입니다.클래스 혼돈 내의 PHP 배열 함수

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 내부에서 일어나는 일이다. 나는 array map이 callback을 취한 다음 배열을 인수로 취한다는 것을 안다. scandir은 디렉토리에서 배열을 가져옵니다.

저에게 의미없는 콜백입니다. 나는 php 문서에서 array() 함수의 문법을 살펴 봤는데 이것과 같은 두 개의 인수를 취하는 것에 대해서는 아무 말도하지 않았다. 분명히 두 번째 함수는 따옴표 안에있는 함수입니까? 코드가하는 일을하는 것이 아니라 코드가하는 일을 이해합니다.

문서화되지 않은 기능입니까?

+0

이것은 객체 메소드 콜백 참조입니다. 그냥 함수 대신에 객체 참조'$ this'와 함수 이름을 터플 (2-part array)로 전달해야합니다. 이것은 클래스 내부에있는 사실을 질문에 공개해야한다. 함수와 메소드에 대한 'this this'와 'protected'한정자를 사용하는 것이 명백하다. – Orbling

+0

수업 시간에 죄송합니다. 그것을 추가 할 것입니다 –

답변

4

array_map의 첫 번째 인수는 callable입니다. 호출 가능 요소 중 하나는 첫 번째 요소가 인스턴스 (또는 메서드가 정적이면 클래스 이름)를 나타내고 두 번째 요소는 메서드 이름을 나타내는 배열입니다. 따라서 array($this, 'get_file_object')은 현재 인스턴스 ($this이 현재 인스턴스 임)의 get_file_object을 참조합니다.

+1

기본적으로'array ($ this, 'get_file_object')'는'$ this-> get_file_object'에 대한 "콜백"문법입니다 :-) –

+0

@RocketHazmat 네, 조금 더 간단합니다 :) –