PHP8.0 기능에 대한 간략한 분석: Named Parameter(named 매개변수)
Yar의 성능을 향상시키기 위해 몇 년 전의 시간을 보냈지만, 초기에 좋은 디자인, 즉 RPC를 병렬로 호출할 때 디자인이 부족해서 조금 불편했던 문제에 직면하기도 했습니다. 현재 메소드의 프로토타입은 다음과 같습니다.
public static Yar_Concurrent_Client::call(string $uri, string $method, ?array $arguments = NULL, ?callable $callback = NULL, ?callable $error_callback = NULL, ?array $options = NULL):null|int|bool {}
언뜻 보면 너무 압도적이지 않나요?
실제 사용에서는 콜백 함수와 오류 콜백 함수가 비어 있을 가능성이 매우 높기 때문에 호출이 실제로 시작될 수 있을 때, 즉 루프가 다시 전역적으로 지정될 때:
Yar_Concurrent_Client::loop(?callable $callback = NULL, ?callable $error_callback = NULL, ?array $options = NULL):?bool {}
그리고 여러 번 $ 옵션은 호출에 따라 유용하므로 실제로 사용하면 많은 수의 병렬 호출 코드가 매개변수에 NULL을 많이 기록하게 됩니다. .한번은
Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val1")); Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val2")); Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val2")); Yar_Concurrent_Clinet::call("https://xxx.com/api", "method", array("arguments"), NULL, NULL, array(YAR_OPT_HEADER=>array("header:val4"));
와 유사한 다형성을 사용하거나 새로운 API를 추가하고 싶었지만 강박 장애로 인해 오늘 아침에 갑자기 RFC가 생각났습니다. 예전에 본 적이 있어서 한참을 찾아보니 PHP 5.6부터 커밋이 되었지만 어쨌거나 저는 비교적 구식이고, 새로운 기능에 대한 연구도 거의 하지 않았고, 많이 사용해 본 적도 없습니다. 모두가 사용할지는 모르겠습니다. ?
오늘 소개할 첫 번째 기능은 인수 풀기입니다.
인수 압축해제
우리는 PHP가 가변 매개변수, 즉 가변 함수를 지원한다는 것을 알고 있습니다. 예를 들어 다음 함수 정의의 경우:
public static Yar_Concurrent_Client::callArray(array $arguments):null|int|bool {}
세 개의 점을 사용하여 매개변수 정의에 주의하세요... (줄임표 기호) 즉, 당신이 어디에 있든 상관없이 이 함수를 호출할 때 전달되는 매개변수 수는 $arguments:
function variadic(...$arguments) { var_dump($arguments); }
라는 배열에 포함됩니다. 물론 이것은 오늘 우리가 사용할 것이 아닙니다. 호출할 때 사용되는 해당 형식의 형제 형식을 인수 풀기라고 합니다.
예를 들어 위의 질문과 비슷하게 함수를 정의합니다.
variadic(); //output: array(0) { } variadic(NULL); //output: array(1) { [0]=> NULL } variadic("foo", "bar"); //output: array(2) { [0]=> string(3) "foo" [1]=> string(3) "bar" } variadic(NULL, array(), "dummy"); //output: array(3) { [0]=> NULL [1]=>[] [2]=> string(5) "dummy" }
대부분의 경우 매개 변수 b, c, d가 모두 NULL이지만 e를 전달해야 할 수도 있습니다. 그런 다음 다음과 유사하게 인수 풀기 기능을 사용하여 코드에서 많은 수의 NULL 매개 변수를 피할 수 있습니다.
function dummy($a, $b = NULL, $c = NULL, $d = NULL, $e = NULL) { var_dump($a, $b, $c, $d, $e); }
호출할 때 나도 사용했습니다... 배열의 압축을 풀고... 호출된 함수에 순서대로 순서를 지정하는 것입니다. 첫 번째 요소는 첫 번째 매개변수에 해당하고 두 번째 요소는 두 번째 요소에 해당합니다.
그러나 여기서 위치는 채우기 위치와 관련이 있으며 색인과 아무 관련이 없습니다. 즉,
$arguments = array( "First argument", NULL, NULL, NULL, "Fifth argument", ); dummy(...$arguments); //output: // string(14) "First argument" // NULL // NULL // NULL // string(14) "Fifth argument"
이 양식에서 색인 4는 여전히 첫 번째 매개변수로 간주됩니다.
이 문제를 생각한 후 갑자기 Yar에 새로운 것을 도입할 필요가 없다는 것을 깨달았습니다. 가장 일반적인 예는 다음과 같습니다.
$arguments = array( 4=> "First argument", 0=> "Fifth argument" ),
이게 끝났다고 생각하시나요?
위 코드를 보면 여전히 문제가 있습니다. 즉, 강박 장애가 있는 사람들에게는 여전히 약간...
그러나 실제로는 중간 배열을 구성해야 합니다. , PHP8.0에 도입된 방법을 사용할 수도 있습니다. 또 다른 RFC, 명명된 매개변수:
Named Parameter
PHP8.0 이후 사용자는 매개변수를 전달할 때 매개변수 이름을 지정할 수 있습니다. 예를 들어 위의 예제 함수의 경우:
$arguments = array( "https://xxx.com/api", "method", array("arguments"), NULL, NULL, "options" => array(YAR_OPT_HEADER => array("header:val1") ) Yar_Concurrent_Clinet::call(...$arguments); $arguments["options"][YAR_OPT_HADER] = ["header:val2"]; Yar_Concurrent_Clinet::call(...$arguments); $arguments["options"][YAR_OPT_HADER] = ["header:val3"]; Yar_Concurrent_Clinet::call(...$arguments); $arguments["options"][YAR_OPT_HADER] = ["header:val4"]; Yar_Concurrent_Clinet::call(...$arguments); Yar_Concurrent_Clinet::call(...$arguments);
이제 호출할 수 있습니다. 전달될 매개변수 이름을 지정합니다. 예:
function dummy($a, $b = NULL, $c = NULL, $d = NULL, $e = NULL) { var_dump($a, $b, $c, $d, $e); }
즉, a와 e에 전달될 매개변수를 지정했으며 지정하지 않으면 기본값은 기본값이 됩니다. .
dummy(a:"dummy", e:"foo"); //output: // string(5) "dummy" // NULL // NULL // NULL // string(3) "foo"
와 같이 선언 순서를 따르지 않아도 됩니다. 출력은 동일합니다.
이런 식으로 시작 부분의 코드는 다음과 같습니다.
dummy(e:"foo", a:"dummy");
원하는 것을 호출할 때 전달할 수 있습니다.
인수 압축 해제에 비해 코드가 여전히 약간 길지만 둘 다입니다. 너무 많은 NULL을 작성할 필요가 없고 새로운 중간 변수를 도입하지 않아도 되는 문제.
그래서 문제는 완벽하게 해결되었고, 굳이 새로운 API를 도입할 필요도 없군요 :)
원본주소 : https://www.laruence.com/2022/05/10/6192.htmlPHP 비디오 튜토리얼추천 학습: "
위 내용은 PHP8.0 기능에 대한 간략한 분석: Named Parameter(named 매개변수)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP에 로그인하는 것은 매우 쉬운 작업입니다. 한 가지 기능만 사용하면 됩니다. cronjob과 같은 백그라운드 프로세스에 대해 오류, 예외, 사용자 활동, 사용자가 취한 조치를 기록할 수 있습니다. CakePHP에 데이터를 기록하는 것은 쉽습니다. log() 함수는 다음과 같습니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.
