PHP 7에서 전역적으로 'strict_types' 활성화
PHP 7에서 전역적으로 'strict_types' 활성화
저는 현재 제 웹사이트를 PHP5에서 PHP7로 마이그레이션하고 있으며, 추가된 엄격한 타이핑 기능을 사용하기 시작했습니다.그러나 이를 위해서는 모든 파일을 다음 행으로 시작해야 합니다.
<?php declare(strict_types=1);
// All other code here
// ...
그래서 궁금한게 있는데요, 이 일을 가능하게 하는 방법이 없을까요?strict_types
세적으비것사을용여하슷한로계▁▁using▁like▁globally여하.php.ini
또는 Apache 구성 파일을 사용하여 매번 이 줄을 작성할 필요가 없는데, 그렇다면 어떻게 활성화할 수 있습니까?
스칼라 유형 힌트에 대한 극도로 긴 토론 후 채택된 구현이 다음과 같았기 때문에 의도적으로 이것은 불가능합니다. https://wiki.php.net/rfc/scalar_type_hints_v5
스칼라 유형 매개 변수에 대한 두 가지 모드를 도입하여 매개 변수를 수신하는 함수가 서명에 필요한 유형을 얻을 수 있도록 보장합니다.그러나 호출 코드가 다음과 같은 두 가지 모드를 제공합니다.
- 모 0에 서특는유예자스검형캐동증스고니다합트하로으을라칼정드예▁((,:▁0▁in▁certain다▁types니캐에합▁automatic트▁scalar▁it▁and▁casts스ally▁mode)을 으로 검증하고 캐스트합니다.
int
는 매변수변니다됩환가개를 합니다.'123'
123
하지만 오류가 있습니다.'hello'
) - 가 사전에 해당 확인 및유형이 변수( both 에 1서 는 호 예 는 가 해 에 성 유 야 해 하 올 며 행 바 른 유 형 이 아 변 매 닌 모 거 개 : 다 개 수 매 두 니 합 부 모 두 변 수 드 효 당 전 사 확 인 수 팅 을 자 출 스 캐 및 ▁any ▁in ▁before
'123'
그리고.'hello'
때문에 되었습니다.int
매개 변수)
다음과 같은 이유로 모드는 파일 단위로 선택되며 함수의 호출자를 기준으로 합니다.
- 설정은 사용자 정의 기능뿐만 아니라 내장 기능에도 영향을 주어야 합니다.
- 함수를 호출하는 모든 코드가 모드 1에서 올바르게 작동하려면 확인하거나 업데이트해야 하지만, 대부분의 오래된 코드는 모드 0에서 정상적으로 실행됩니다.
- 글로벌 설정을 사용하면 두 모드 모두에서 테스트된 라이브러리 또는 원하는 동일한 모드만 사용할 수 있습니다.
- 기본 모드를 선언하지 않는 파일은 기존 코드를 실행하려면 PHP 5.x와 유사하게 계속 작동해야 합니다. 이는 기본값이 모드 0인 경우에만 가능합니다.
재사용 가능한 라이브러리를 작성하는 사용자의 관점에서:
- 설정에 상관없이 함수는 요청된 매개 변수 유형을 수신합니다.
- 잘못된 유형의 함수를 호출할 때 오류를 수신하려면 다른 응용 프로그램과 라이브러리를 동일한 설정으로 만들지 않고 모드 1을 사용할 수 있습니다.
- 모드 0의 자동 검사 및 캐스트를 원할 경우, 그렇게 할 수 있지만 모드 1에서 실행되는 다른 라이브러리 및 응용 프로그램과 상호 작용합니다.
- PHP 7.0 이전에 작성된 오래된 라이브러리(또는 출시될 때 둘 다 지원해야 했던 라이브러리)는 기본 모드 0이 내장된 기능의 기존 동작과 유사하기 때문에 이전과 같이 대략적으로 계속 작동합니다.
따라서 엄격한 유형 모드를 사용하기 위해 작성된 파일과 사용되지 않은 파일을 PHP에 말하는 것은 당신에게 달려 있습니다. 이를 위한 방법은declare
진술.
PHPStorm은 다음과 같은 작업을 지원하기 위해 검사를 실시합니다.
근본적으로 아닙니다.
엄격한 모드를 사용한 라이브러리만 요구하면 패키지가 불필요하게 분리되기 때문입니다.또한 엄격한/약한 유형 옵션은 PHP의 추가 기능에 불과하다는 점도 고려해야 합니다.
언급URL : https://stackoverflow.com/questions/37111470/enabling-strict-types-globally-in-php-7