2017-11-22 14 views
2

Javascript에서는 함수를 전달하는 데 익숙합니다. 첫 번째 클래스 값이므로 함수를 전달하는 데 익숙합니다.함수 이름 리터럴을 상위 함수로 전달하는 것이 안전합니까?

function fold($f, $acc) { 
    return function ($xs) use ($f, &$acc) { 
    return array_reduce($xs, $f, $acc); 
    }; 
} 

function add($m, $n) {return $m + $n;}; 

fold(add, 0) ([1, 2, 3]); 

내가 생각 add 더 간결을 선호 난 그냥 람다 $add = function ($m, $n) {return $m + $n;}을 할당 할 수 있습니다 알고 : - 그러나, PHP에서 나는 통지 " '추가' 가정 정의되지 않은 상수 추가의 사용"을 얻는다. 이게 안전한가요? 아니면 장기적으로 내가 운명에 빠졌습니까?

+0

함수 이름은 따옴표에 있어야 PHP에서 경고로 변경되므로주의한다. –

답변

3

PHP 기능은 "일급"이라고 할 수 없습니다. 실제로 함수를 이름으로 전달하지 않고 정의되지 않은 상수 인 and을 전달합니다. 그 상황에서의 동작은 통지 *를 발생시키고 문자열 값 "and"로 폴백하는 것입니다. 이것은 전역 함수에 대한 유효한 식별자이므로 코드가 성공적으로 실행됩니다 (오류 알림 임에도 불구하고).

fold()에 함수를 직접 전달하는 유일한 방법은 말한대로 변수에 할당하는 것입니다. 그렇지 않으면 전역 함수의 이름을 전달하는 것만으로도 잘 작동하지만 달성하고자하는 것은 아닙니다. `배`('추가') :

* 그냥 빨리 부록

이 통지가 7.2

+0

내 일반적인 기능은 일반적으로 전역입니다. 대부분의 경우 안전합니다. 두 번째 생각에서, 부분적으로 적용된 함수 (예 :'$ sum = fold (add, 0)')를 할당 할 때 나는 어쨌든'$ '로 끝을 맺습니다. 그래서 나는이 구문에 익숙해 져야한다. – ftor