PHP 8.1에서 호출 가능한 구문을 작성하는 새로운 방법인 First-Class 호출
이전에는 다음과 같이 작성할 수 있었습니다.
$foo = [ $this, 'foo' ];
$strlen = Closure::fromCallable( 'strlen');
즉, 다른 종류의 함수를 참조하는 클로저를 생성하여 해당 클로저를 변수로 사용할 수 있습니다.
이것은 내가 성가신 부분이었습니다. 실제 함수를 참조하는 데 사용되는 ‘문자열’ 이름과 배열에 대해 이야기하는 것입니다.
이러한 클로저를 생성하기 위한 적절한 내장 구문입니다!
다음과 같이 생성하면 됩니다.
$foo = $this->foo(...);
$strlen = strlen(...);
점 3개 보이나요? 스프레드 연산자와 비슷해 보이지만 이 맥락에서 의미하는 바는 다릅니다. 그것들은 우리가 실제로 함수를 호출하는 것이 아니라 대신 그 함수를 호출하는 클로저를 저장한다는 것을 나타내는 새로운 방법입니다.
함수가 허용하는 인수의 양에 관계없이 이 세개의 점만 작성할 수 있습니다.
그리고 이 구문은 정적 함수와 함께 작동 가능합니다.
$foo = MyClass::foo(...);
그래도 작동하지 않는 것은 비정적 함수를 정적으로 참조하는 것입니다.
호출 가능 항목을 생성하려면 클래스의 실제 인스턴스가 필요합니다. 따라서 다음과 같이 작동하지 않습니다.
class MyController {
public function index () {
/* ... */
}
}
$action = MyController::index(...); // Error!!
이것은 First-Class Callable의 사용을 약간 제한할 수 있다. 하지만 여전히 개선된 점은 아주 기쁩니다.