PHP7 문법적 변경점 정리
http://blog.naver.com/parkjy76/220560987707 | ||||
http://php.net/manual/kr/migration70.php |
원문 출처 : http://php-archive.net/php/php7Viewer
PHP 5.x 계열의 메이저 업데이트인 PHP 7.0 에서는 처리 속도의 향상 및 언어 사양의 변경이 이루어져 있습니다.
새로운 기능 및 사용되지 않는 기능 중 큰 영향을 미치는 변경 사항에 대해 정리해 보았습니다.
POSIX 정규 표현식 함수의 폐지
5.3에서 deprecated 였는데 함수가 제거되었습니다.
영향을 받는 것은 다음 함수입니다.
ereg (), eregi (), ereg_replace () eregi_replace, split () spliti () sql_regcase ()
ereg와 관련된 대부분의 기능이 제거되었습니다.
대용으로 preg_match와 preg_replace 등의 PCRE 계열 함수를 사용할 수 있습니다.
ext/mysql 확장 폐지
5.5에서 deprecated 였는데 mysql_ 함수들이 제거되었습니다.
PDO와 mysqli가 준비되어 지금도 오래된 참고서에 현혹되어 사용하는 사람이 많았기 때문에 좋은 변화라고 생각합니다.
숫자가 너무 많아 폐지된 함수는 열거할 수 없지만 "mysql_"로 시작하는 함수는 향후 사용할 수 없습니다.
PDO와 mysqli를 사용해주세요.
가변 변수의 새로운 기술 방법
다차원 배열을 가변 변수로 사용시 ${$var[ 'foo'][ 'bar']}처럼 {}를 사용하였습니다만 PHP7에서는 ($$var)['foo']['bar']로 표현할 수 있습니다.
클래스 메소드나 속성의 경우는 다음과 같이합니다
1
2
3
4
5
6
7
|
// PHP 5.x;
$var->{$prop['key']};
$var->{$prop['key']}();
// PHP 7;
($var->$prop)['key'];
($var->$prop)['key']();
|
「::」중첩
클래스의 상수와 static 메소드에 관해 ":"를 중첩해 사용할 수 있습니다.
1
|
$var::$class::$constant
|
함수가 반환하는 값에 직접 액세스하기
함수가 돌려 준 callable(콜백)과 callable을 가지는 변수에서 직접 호출할 수 있습니다.
1
2
3
|
foo()();
$foo()();
$foo()['bar']();
|
무명 클래스 지원
"class"를 사용하여 일회성 무명 클래스(Anonymous Class)를 만들 수 있습니다.
1
2
3
4
5
6
|
$object = new class("Hello") {
public $var;
public function __construct($arg) {
$this->var = $arg;
}
};
|
use 그룹화
use를 이용할 때 네임 스페이스를 그룹화해 여러 클래스를 일괄 지정할 수 있게 되었습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
// 5.x
use Vendor\ComponentA\ClassA;
use Vendor\ComponentA\ClassB;
use Vendor\ComponentA\ClassC as Foo;
use Vendor\ComponentB\ClassD;
use Vendor\ComponentC\ClassE;
// 7.0
use Vendor\ComponentA\{
ClassA,
ClassB,
ClassC as Foo
};
use Vendor\{
ComponentB\ClassD,
ComponentC\ClassE
};
|
Null Coalesce 연산자 추가
$ foo = isset ($ bar)? $ bar : $ baz;
PHP7에서는 새로운 연산자 ?? 를 사용하여 좀 더 쉽게 쓸 수 있게 되었습니다.
$ foo = $ bar ?? $ baz;
??는 여러 개 사용할 수 있습니다.(물론 ??와 ?를 섞어서 쓸 수 있습니다. 삼항 연산자 안에 null coalesce 연산자를 사용)
아래는 $a가 null 이라면 $b의 값을, $b가 null 이라면, $c의 값이 저장됩니다.
$var = $a ?? $b ?? $c;
우주선 연산자 (<=>)의 추가
두 값이 같으면 0을, 왼쪽의 값이 작으면 -1, 크면 +1 반환합니다.
배열을 이용한 상수
preg_replace_callback_array() 함수의 추가
dirname() 함수의 강화
경로 문자열에서 디렉토리 이름을 반환하는 dirname()에 제 2 인수를 지정할 수 있게 되어, 몇 번째 디렉토리 이름을 취득할 것인지 지정할 수 있게 되었습니다.
1
2
|
$path = '/dir1/dir2/dir3/example.txt';
dirname($path, 2); // "/dir1/dir2"
|
password_hash ()의 salt 옵션 폐지
사용시에는 E_DEPRECATED가 발생합니다.
assert () 언어 구조화
try~catch에서 다루는 오류 종류의 확대
그 외에도 "\ParseError"이나 "\TypeError"등의 오류도 다룰 수 있습니다.
Unicode 확장 영역에 대응
타입 힌팅 강화
· bool
· float
· int
· string
함수 function( int $foo )라고 했을때, "100 "등의 문자열을 넘겨 주면 int 형의 100로 변환됩니다.
declare() 함수에서 "strict_types = 1"로 지정하면 자동 변환을 무효화하고 적절한 형태의 값이 주어지지 않은 경우 "\TypeError"을 발생시킬 수 있습니다.
반환 값도 타입 힌팅을 사용할 수 있으며 다음과 같이 지정합니다.
function example(string $str): int
{
//
}
지금까지 소개한 것은 새로운 기능의 극히 일부로 실제로는 더 많은 변화가 있습니다.
자세한 내용은 공식 문서를 참고해 주세요. 아래는 마이그래션에 관한 내용입니다.
Migrating from PHP 5.6.x to PHP 7.0.x : http://php.net/manual/kr/migration70.phpViewer
'study' 카테고리의 다른 글
CentOS SVN 설치 및 설정 (0) | 2022.12.30 |
---|---|
[리눅스] 유저(User) 생성 / 삭제 / 수정 방법 (0) | 2022.04.04 |
윈도우에 Apache, php7 설치하기 (0) | 2022.03.02 |
Use Google Cloud Vision API to process invoices and receipts (0) | 2021.12.30 |
[2019.04.24] 실시간 통신 API - webSocket (0) | 2021.12.30 |