>  기사  >  백엔드 개발  >  PHP7.2의 새로운 기능(매개변수 유형 선언)

PHP7.2의 새로운 기능(매개변수 유형 선언)

藏色散人
藏色散人앞으로
2019-11-11 13:51:263049검색

PHP 7.2는 더 나은 코드를 작성할 수 있는 새로운 특징, 기능 및 개선 사항을 포함하여 공식 출시되었습니다. 이 기사에서는 PHP 7.2의 가장 흥미로운 언어 기능 중 일부인 매개변수 유형 선언을 소개하겠습니다.

권장: "PHP7 Tutorial"

매개변수 유형 선언

PHP 5부터 함수 선언에 전달될 예상 매개변수 유형을 지정할 수 있습니다. 주어진 값의 유형이 잘못된 경우 PHP는 오류를 발생시킵니다. 매개변수 유형 선언(유형 힌트라고도 함)은 함수나 클래스 메서드에 전달될 것으로 예상되는 변수 유형을 지정합니다.

예는 다음과 같습니다.

class MyClass {
    public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $myclass){
    return $myclass->var;
}
echo test($myclass);

이 코드에서 테스트 함수에는 MyClass 인스턴스가 필요합니다. 잘못된 데이터 유형은 다음과 같은 치명적인 오류를 발생시킵니다:

Fatal error: Uncaught TypeError: Argument 1 passed to test() must be an instance of MyClass, string given, called in /app/index.php on line 12 and defined in /app/index.php:8

PHP 7.2 유형 힌트는 객체 데이터 유형과 함께 사용될 수 있으며, 이러한 개선으로 일반 객체를 함수나 메소드의 매개변수로 선언할 수 있습니다. 예는 다음과 같습니다.

class MyClass {
    public $var = '';
}
class FirstChild extends MyClass {
    public $var = 'My name is Jim';
}
class SecondChild extends MyClass {
    public $var = 'My name is John';
}
$firstchild = new FirstChild;
$secondchild = new SecondChild;
function test(object $arg) {
    return $arg->var;
}
echo test($firstchild);
echo test($secondchild);

이 예에서는 테스트 함수를 두 번 호출하여 각 호출마다 다른 객체를 전달합니다. 이전 PHP 버전에서는 불가능했습니다.

객체 반환 유형 선언

매개변수 유형 선언이 함수 매개변수의 예상 유형을 지정하는 경우 반환 유형 선언은 반환 값의 예상 유형을 지정합니다.

반환 유형 선언은 함수가 반환할 것으로 예상되는 변수 유형을 지정합니다.

PHP 7.2부터 객체 데이터 유형에 대한 반환 유형 선언을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

class MyClass {
    public $var = 'Hello World';
}
$myclass = new MyClass;
function test(MyClass $arg) : object {
    return $arg;
}
echo test($myclass)->var;

이전 PHP 버전에서는 다음과 같은 치명적인 오류가 발생했습니다.

Fatal error: Uncaught TypeError: Return value of test() must be an instance of object, instance of MyClass returned in /app/index.php:10

물론 PHP 7.2에서는 이 코드가 'Hello World'로 응답합니다.

매개변수 유형 은혜 선언

PHP는 현재 하위 클래스와 상위 클래스 또는 인터페이스 간의 매개변수 유형 차이를 허용하지 않습니다. 그게 무슨 뜻이에요?

다음 코드를 고려하세요.

<?php
class MyClass {
    public function myFunction(array $myarray) { /* ... */ }
}
class MyChildClass extends MyClass {
    public function myFunction($myarray) { /* ... */ }
}

여기에서는 하위 클래스의 매개변수 유형을 생략했습니다. PHP 7.0에서 이 코드는 다음과 같은 경고를 생성합니다:

Warning: Declaration of MyChildClass::myFunction($myarray) should be compatible with MyClass::myFunction(array $myarray) in %s on line 8

PHP 7.2부터 코드를 손상시키지 않고 하위 클래스에서 유형을 생략할 수 있습니다. 이 제안을 통해 모든 하위 클래스를 업데이트하지 않고도 라이브러리에서 유형 힌트를 사용하도록 클래스를 업그레이드할 수 있습니다.

목록 구문의 후행 쉼표

배열의 마지막 항목 뒤의 후행 쉼표는 PHP에서 유효한 구문이며 새 항목을 쉽게 추가하고 쉼표 누락으로 인한 구문 분석 오류를 방지하기 위해 때때로 이를 사용하는 것이 좋습니다. PHP 7.2부터 그룹화 네임스페이스에 후행 쉼표를 사용할 수 있습니다.

이 RFC 및 일부 코드 예제에 대한 자세한 내용은 목록 구문의 후행 쉼표를 참조하세요.

위 내용은 PHP7.2의 새로운 기능(매개변수 유형 선언)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제