이 글에서는 PHP의 메소드 매개변수 유형 제약사항을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.
PHP 메소드 매개변수에 관한 이전 기사에서 우리는 PHP 메소드 매개변수에 대한 몇 가지 팁에 대해 이야기했습니다. 오늘 우리가 가져오는 것은 PHP 메소드의 매개변수 유형에 대한 보다 심층적인 연구입니다.
PHP5 이후 PHP는 공식적으로 메소드 매개변수 유형 제약을 도입했습니다. 즉, 메소드 매개변수의 유형을 지정한 경우 다른 유형의 매개변수를 전달하면 오류가 발생합니다. PHP 매뉴얼에서 메소드 유형 제약은 클래스, 인터페이스, 배열 또는 호출 가능한 콜백 함수로 제한됩니다. 기본값인 NULL이 지정되면 NULL을 매개변수로 전달할 수도 있습니다.
class A{} function testA(A $a){ var_dump($a); } testA(new A()); // testA(1); // Fatal error: Uncaught TypeError: Argument 1 passed to testA() must be an instance of A, int given,
이 예제에서는 매개변수 유형을 클래스 A로 정의했기 때문에 스칼라 유형을 전달하면 오류 메시지가 직접 반환됩니다.
function testB(int $a){ var_dump($a); } testB(1); testB('52aadfdf'); // 字符串强转为int了 // testB('a'); // Fatal error: Uncaught TypeError: Argument 1 passed to testB() must be of the type int, string given function testC(string $a){ var_dump($a); } testC('测试'); testC(1); // 数字会强转为字符串 // testC(new A()); // Fatal error: Uncaught TypeError: Argument 1 passed to testC() must be of the type string
스칼라 유형은 유형 제약 조건을 사용할 수 없다고 매뉴얼에 명확하게 명시되어 있습니다. 하지만 실제로 사용할 수는 있지만 모두 스칼라 유형인 경우 강제로 서로 변환해야 하므로 좋은 제약 역할을 하지 않습니다. 예를 들어 위의 예에서는 int 및 string 유형이 강제로 서로 변환됩니다.
스칼라가 아닌 유형을 지정하면 오류가 보고됩니다. 이것이 이 글의 초점입니다. 여러분, 선을 그어 주십시오. 사실 직설적으로 말하면, 매개변수의 유형을 고정된 스칼라 유형으로 지정하려면 매개변수에 이를 지정하는 것은 메소드에서 다른 유형 판단을 하는 것이 가장 좋습니다.
그리고 매개변수를 강제로 변환하면 메서드 내부 판단에 편향이 발생하기도 합니다.
마지막으로 인터페이스와 익명 메서드의 유형 제약 조건을 살펴보겠습니다. 익명 매개변수 유형은 Laravel과 같은 프레임워크에서 매우 일반적입니다.
// 接口类型 interface D{} class childD implements D{} function testD(D $d){ var_dump($d); } testD(new childD()); // 回调匿名函数类型 function testE(Callable $e, string $data){ $e($data); } testE(function($data){ var_dump($data); }, '回调函数');
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202001/%E5%85%B3%E4%BA%8EPHP%E7%9A%84%E6%96%B9%E6%B3%95%E5%8F%82%E6%95%B0%E7%B1%BB%E5%9E%8B%E7%BA%A6%E6%9D%9F.md
추천 학습: php 비디오 튜토리얼
위 내용은 오랫동안 기다려온 PHP 메서드 매개변수 유형 제약 조건이 출시되었습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!